在catel中出现时立即打印日志消息

时间:2015-09-08 12:46:30

标签: logging catel

我想直接显示logmessages。

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

  //.. Do a lot of things

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

我添加了一个日志监听器来显示屏幕上的logmessages。但是如果方法结束,则会显示两个logmessages。是否可以在发生logmessages时直接显示它们。

1 个答案:

答案 0 :(得分:0)

这非常复杂,我将尝试解释它为何如此工作。想象一下在后台线程中运行的方法。然后必须将消息分派到UI线程。我们可以通过两种方式发送:

  • BeginInvoke(放在队列末尾)
  • 调用(立即执行)

使用Invoke可能看起来不错,但它会阻止(后台)线程,直到UI线程返回为止。如果UI线程也在等待某事,那么就会出现死锁。

最安全的方法是使用BeginInvoke(Catel使用的)。如果一个监听器支持多线程,它将立即被处理,否则它将被批量刷新以获得性能(例如,文件将以50或100的批量刷新)。