我想弄清楚一種方法來使用事件,處理程序 - 從異步操作取消操作(進度欄)。VB.NET:添加取消事件處理程序從其他類
我有一個類ProgressBar,它顯示了一個操作的進度。它有一個取消按鈕(這是朋友WithEvents,通常生成,並有一個私人子ButtonCancel_click)。沒什麼特別的。
取消設置公共CancelButtonHasBeenPressed。
我希望能夠在另一個類中按下Cancel按鈕。
我讀過關於添加處理程序以對事件作出反應,並在操作結束時刪除處理程序的問題,這正是我應該做的。
是這樣的:
Public Function Mine(ByRef myProgress As ThatProgressWindow)
' some setup
AddHandler CancelEvent, AddressOf myProgress.ButtonCancel_Click
' create and call workers
RemoveHandler CancelEvent, AddressOf myProgress.ButtonCancel_Click
End Function
Public Event CancelEvent()
Private Function worker(ByVal state As Object) As Object
' do work
If ' how do I check for the event ? Then drop everything and run
End Function
的與代碼/僞上述問題:在AddHandler的
1),I應該補充說存在,連接到實際消除東西的事件 - 但ProgressBar中沒有任何東西可以做到這一點 - 我如何添加取消?我只有一個取消按鈕...所以我不得不做的button_click公開這可能是錯誤的...
不知何故,我想用戶按下取消會觸發該事件......這是不正確的?我對這一點真的很陌生,網絡似乎假設,在所有例子中,看這些例子的人都已經是專家。
2)如何檢查事件是否已被提出?
正如我試圖鍵入「If」後跟一個事件名稱,以任何形式,Intellisense一直告訴我這是錯誤的。
請幫我開始吧!
謝謝。
我正在使用線程池,我想從線程池中的工作人員內部取消。我已經考慮過BackgroundWorker來調用設置整個事物的類,但是我沒有在進度條的實際窗口上留有空間,這就是爲什麼我有一個單獨的窗口。 Backgroundworker對多線程無濟於事...... – Thalia 2013-03-20 17:25:57
BackgroundWorker類使用線程池來運行,並且它不會綁定到任何類型的窗口,因此無論您在何處顯示進度條和/或取消選項。如果你有其他要求處理多個線程等,那麼你可能想要更新你的問題與這些額外的細節... – tcarvin 2013-03-20 17:52:13
你是對的,這將是一個比我做的更乾淨的方法。我將不得不學習如何使用它 - 沒有找到任何實際的例子,只有非常簡單的例子,我沒有用外部類和單獨的進度條來實現。我簡化了我的代碼,不使用事件 - 因爲我無法弄清楚,我可能會遲一點。我一直在研究使用BackgroundWorker--不是在這種情況下,而是通常在過去幾周內,所以我將其標記爲缺少替代方案的答案。 – Thalia 2013-03-21 20:58:43