簡體   English   中英

所有線程完成后如何覆蓋游標

[英]How to override cursor when all threads complete

初始信息:

我有一種從數據庫獲取數據並將其拆分為邏輯部分的方法(為簡單起見,我們只說這個數字始終是8個不相等的部分)。 對於每個部分,我都會啟動一個新的后台線程以將數據寫入數據庫。

為此,我將最終運行8個異步線程,全部使用相同的_DoWork()和_RunWorkerCompleted()方法。

啟動線程時,將立即為其添加后台工作者列表。 在_RunWorkerCompleted()方法中,我從列表中刪除該后台工作程序,並檢查后台工作人員列表是否計數為0; 如果不是,我繼續,如果是,那么我必須讓用戶知道該操作已完成。

問題:

在任何線程啟動之前,我調用Mouse.OverrideCursor = Cursors.Wait;。 為了顯示一個等待的光標。 一切完成后,我必須調用Mouse.OverrideCursor = null;。 為了強制鼠標光標返回到正常狀態。

但是,當我在if語句內的_RunWorkerCompleted()方法中調用該語句,詢問bw列表的計數是否為0時,我得到了一個運行時異常,指出另一個線程擁有該對象。

我怎么稱呼Mouse.OverrideCursor = null; 在沒有運行時異常的情況下完成所有線程?

注意:

嘗試從_RunWorkerCompleted()方法內部顯示MessageBox時,我也遇到了同樣的問題。 我以為_RunWorkerCompleted()在UI線程上?

任何幫助將不勝感激。

PS,如果需要任何代碼來更好地評估問題,請詢問並具體說明您希望看到的代碼的哪一部分(這些方法后面有很多內容,我不想讓任何人感到困惑發布太多代碼)。

問候,

凱爾

如果您需要更新UI時調用RunWorkerCompleted方法,則必須使用如下所示的Dispatcher來在UI線程中進行更新:

 this.Dispatcher.Invoke(() =>
            {
               // YOUR UI UPDATE
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM