我想弄清楚一种方法来使用事件,处理程序 - 从异步操作取消操作(进度栏)。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