WPFでMVCモデルを使用していますが、UIのロックに問題があります。アプリケーションは2つのエンドポイント間で通信しており、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は単なるTextBoxです。
/// <summary>
/// Location for logs to be displayed.
/// </summary>
public TextBox LoggingBox { get; set; }
WPFを使用するのはこれが初めてなので、私が犯している単純な間違いがあると確信しています。任意の洞察をいただければ幸いです。