我正在使用带有 WPF 的 MVC 模型,并且在锁定 UI 时遇到了困难。该应用程序正在两个端点之间进行通信,并且 UI 有一个 TextBox,我将详细的通信日志写入该文本框。代码可以一次发送单个文件或多个文件。
我有一个特定的日志记录类,用于处理日志,因为它们需要创建、格式化和写入磁盘。我将 TextBox 传递给 Logging 类,然后使用 Dispatcher 对其进行写入,但是当我同时写入多个日志时,UI 会锁定。如果我只从一个发送的文件中写入日志,那么一切正常。
我试过添加一个线程锁,但这似乎没有解决任何问题。我什至锁定了整个写入过程(处理信息、写入磁盘和写入 UI),但仍然遇到相同的锁定问题。
下面列出了我用来写入 UI 的代码:
/// <summary>
/// Post the message to the UI.
/// </summary>
/// <param name="message">Message to post.</param>
/// <param name="scrollToEnd">Scroll to the end of the Text Box if true</param>
private void PostMessage(String message, bool scrollToEnd)
{
LoggingBox.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(delegate()
{
LoggingBox.AppendText(message);
if (scrollToEnd)
LoggingBox.ScrollToEnd();
}
));
}
LogBox 只是一个文本框:
/// <summary>
/// Location for logs to be displayed.
/// </summary>
public TextBox LoggingBox { get; set; }
这是我第一次使用 WPF,所以我确信我犯了一个简单的错误。任何见解将不胜感激。