如何維護一個前臺線程和後臺線程。如果我嘗試將項目添加到列表中,它會給我一個交叉線程異常。BackGroundWorker
-1
A
回答
8
通常,UI更新只能從UI線程本身執行。
用BackgroundWorker
這樣做的機制是調用工作人員的ReportProgress
方法(確保WorkerReportsProgress = true
)。此方法將引發ProgressChanged
事件,由UI線程處理。
所以,如果你想將項目添加到一個ListBox
控制,例如,基於一些工作你BackgroundWorker
是幹什麼的,叫ReportProgress
並通過你需要作爲一個參數的任何數據。該數據將存儲在該事件提供的ProgressChangedEventArgs
的UserState
屬性中。您的事件處理程序可以獲取此數據並使用它填充ListBox
。
或者,您可以通過處理工作人員的RunWorkerCompleted
事件來添加所有內容。如果您的工作人員執行的工作不需要很長時間,那麼這通常更可取,因爲它更簡單,並且強調用戶界面更少(用更少的離散更新來執行)。
0
如果您想將項目添加到DoWork-Event的列表中,您需要「調用」控件。
+1
這不是真正推薦的方法。 – 2010-09-03 07:20:08
0
您可以使用ListView觸發將事件添加到列表中的事件,如下面的示例所示。
ListViewItem _listViewItem;
private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
//your loop to get list view item
_listViewItem = new ListViewItem(mytext) {tag = mytagobject);
_listViewItem.SubItems.Add(mysubitemtext);
Invoke(new EventHandler(UpdateUiEvent), new[] { sender, e });
}
void UpdateUiEvent(object sender, EventArgs e)
{
listView1.Items.Add(_listViewItem);
}
相關問題
- 1. BackgroundWorker的
- 2. SpeechRecognitionEngine BackgroundWorker
- 3. Powershell Backgroundworker
- 4. BackgroundWorker - C#
- 5. Multi-BackgroundWorker
- 6. Backgroundworker abort
- 7. BackgroundWorker:將通用列表傳遞給BackgroundWorker
- 8. 從BackgroundWorker DoWork傳遞值到BackgroundWorker完成
- 9. WFP BackgroundWorker等待其他BackgroundWorker完成
- 10. BackgroundWorker中的BackgroundWorker - 錯誤處理
- 11. 從另一個backgroundworker c停止backgroundworker#
- 12. BackgroundWorker for Multiple Operations
- 13. BackgroundWorker和ConcurrentQueue
- 14. 取消BackgroundWorker
- 15. BackgroundWorker RunWorkerCompleted事件
- 16. BackgroundWorker問題
- 17. BackgroundWorker Still Blocks IHttpHandler
- 18. 線程與Backgroundworker
- 19. BackgroundWorker返回值?
- 20. BackgroundWorker - Report Time
- 21. BackgroundWorker問題
- 22. 與BackgroundWorker的
- 23. C#winform backgroundworker
- 24. 多的BackgroundWorker vb.net
- 25. 調試BackgroundWorker的
- 26. C#BackgroundWorker ReportProgress Int32?
- 27. 從BackgroundWorker的
- 28. 的BackgroundWorker在C#
- 29. 掛在BackgroundWorker
- 30. 與BackgroundWorker的
請給這個問題的更多信息。可以確定你在問什麼,但是很難。 – 2010-09-03 07:10:11
按列表您是指集合對象'System.Collections.Generic.List'? –
2010-09-03 07:13:01