很多時候,由於后台線程需要直接控制相關主線程的工作。
如果直接使用則會出現如下類似的異常:
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);
});
