2013-03-20 59 views
0

我想弄清楚一種方法來使用事件,處理程序 - 從異步操作取消操作(進度欄)。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一直告訴我這是錯誤的。

請幫我開始吧!

謝謝。

回答

0

您是否考慮使用BackgroundWorker?它支持進度事件和取消。

另外,請不要在您的Mine函數中使用ByRef。如果有人維護你的代碼沒有意識到這個參數是ByRef,它不是必需的,並且可能導致在路上發生微妙的錯誤。

+0

我正在使用線程池,我想從線程池中的工作人員內部取消。我已經考慮過BackgroundWorker來調用設置整個事物的類,但是我沒有在進度條的實際窗口上留有空間,這就是爲什麼我有一個單獨的窗口。 Backgroundworker對多線程無濟於事...... – Thalia 2013-03-20 17:25:57

+0

BackgroundWorker類使用線程池來運行,並且它不會綁定到任何類型的窗口,因此無論您在何處顯示進度條和/或取消選項。如果你有其他要求處理多個線程等,那麼你可能想要更新你的問題與這些額外的細節... – tcarvin 2013-03-20 17:52:13

+0

你是對的,這將是一個比我做的更乾淨的方法。我將不得不學習如何使用它 - 沒有找到任何實際的例子,只有非常簡單的例子,我沒有用外部類和單獨的進度條來實現。我簡化了我的代碼,不使用事件 - 因爲我無法弄清楚,我可能會遲一點。我一直在研究使用BackgroundWorker--不是在這種情況下,而是通常在過去幾周內,所以我將其標記爲缺少替代方案的答案。 – Thalia 2013-03-21 20:58:43

相關問題