WPF 后台運行主線程


 

很多時候,由於后台線程需要直接控制相關主線程的工作。

如果直接使用則會出現如下類似的異常:

System.NotSupportedException:“該類型的 CollectionView 不支持從調度程序線程以外的線程對其 SourceCollection 進行的更改。”


方法一

在窗體初始化的時候加入:

public MainWindow()
{

  DispatcherHelper.Initialize();
  InitializeComponent();
}

后台代碼:

Task.Run(() => DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
  // do something
}));


方法二

這個方法沒有仔細研究過,不過是可以用的:


ThreadPool.QueueUserWorkItem(delegate
{
  System.Threading.SynchronizationContext.SetSynchronizationContext(new System.Windows.Threading.DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher));
  System.Threading.SynchronizationContext.Current.Post(pl =>
  {
    // do something
  }, null);
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM