的好,這可能是很簡單的,但一切我嘗試似乎只是撞到南牆。WPF調度,背景工人和很多痛苦
我有兩個屬性,這必將對我的WPF表單視圖模型:
bool IsWorking {get;set;}
ObservableCollection<OtherViewModel> PendingItems {get;set;}
我有打電話來從Outlook中的一些新的待批項目的方法,但是我也應該顯示哪些某種形式(紡紗進度條)的進展,進度條的知名度勢必對視圖模型的IsWorking屬性,柵格勢必PendingItems集合。
我希望能夠將IsWorking設置爲true,以便UI可以顯示進度條,在後臺運行該工作,然後在完成後將IsWorking設置爲false,以便進度條消失。
我創建了一個backgroudworker是這樣的:
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
現在worker_DoWork調用雲的提取未決的項目,並將它們添加到PendingItems收集的方法,一切都在後臺運行的UI仍然響應,但嘗試添加到集合時,出現正常的交叉線程錯誤。我在調度程序調用中打包更改集合的代碼:
// Update to show the status dialog.
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Render,
new Action(delegate()
{
this.PendingItems.Add(\\Blah);
})
);
但它仍會引發相同的交叉線程錯誤。
我不是很好的線程,因此我不知道我可能是做錯了,會有人能夠給我個忙?
非常感謝你的偉大工程。 – 2010-02-11 00:45:21
第二個鏈接已死亡。有任何想法嗎? – brumScouse 2012-08-15 11:22:36
@brumScouse嘗試現在 – 2012-08-20 06:18:29