問題:應該將「Application.Current.Dispatcher.Invoke」放入引發事件的工作線程還是處理事件的UI代碼中?它可以很好地工作,但更好的做法或差異是什麼?Application.Current.Dispatcher在調度程序線程以外的事件的使用
在創建新聞自動收錄器的WPF應用程序中,我通過Microsoft.Office.Interop.Outlook
和ItemAdd
事件從新收件箱電子郵件中檢索正文文本,然後引發傳遞正文文本的事件。主視圖模型如下訂閱此事件。在OutlookReader
類:
private void OnEmailFoundWithSubjectMatchingFilter(_MailItem item)
{
System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
FoundEmailWithSubjectMatchingFilter?.Invoke(this, item.Body);
});
}
而且,在MainViewModel
類:
private void HandleEmailFeed(object sender, string e)
{
//Application.Current.Dispatcher.Invoke(() =>
//{
var parser = new MailBodyParser();
AddFeedItem(parser.Parse(e));
//});
}
沒有一個正確的答案。做任何更符合圖書館用戶期望的內容。有時候這被稱爲最不驚訝的原則。 –
我傾向於認爲UI端應該調用調度程序,因爲工作線程不應該真正負責如何使用它的結果。真的想知道是否有任何技術/性能差異。 – JJJulien
我不明白你在問什麼。按照慣例,「UI線程」是調度程序線程。如果您已經在UI線程中執行代碼,則不需要調用Dispatcher.Invoke()。您只會從線程中調用Dispatcher.Invoke(),而不會從UI線程調用。 –