2015-09-08 1 views
0

Я хочу отображать logmessages непосредственно, когда они произошли.Немедленно распечатать сообщение о регистрации, когда они произошли в catel

public void MyMethod() 
{ 
    _log.Info("Start of MyMethod"); 

    //.. Do a lot of things 

    _log.Info("End of MyMethod"); 
} 

Я добавляю прослушиватель журналов, чтобы показать лог-сообщения на экране. Но оба метода logmessages отображаются, если метод завершен. Можно ли отображать лог-сообщения непосредственно, когда они произошли.

ответ

0

Это очень сложный вопрос, и я попытаюсь объяснить, почему он работает именно так. Представьте, что метод работает в фоновом потоке. Затем сообщения должны быть отправлены в поток пользовательского интерфейса. Есть 2 способа мы можем послать:

  • BeginInvoke (помещается в конец очереди)
  • Invoke (сделайте это сейчас)

Использование Invoke может выглядеть хорошо здесь, но он будет блокировать (фоновый) поток до тех пор, пока поток пользовательского интерфейса не вернется. Если UI-поток также ждет чего-то, у вас есть тупик.

Самый безопасный способ - использовать BeginInvoke (что использует Catel). Если слушатель поддерживает многопоточность, он будет обработан немедленно, в противном случае он будет покрашен в партии для повышения производительности (например, файлы будут очищены партиями по 50 или 100).

+0

ОК. Поэтому нет смысла регистрировать начало метода. Только распечатывайте успех или неудачу метода. –

+0

Это имеет смысл, потому что он все равно войдет в правильном порядке. Это просто не так, как вы хотите. –

Смежные вопросы