我试图找出一种方法来使用事件,处理程序 - 从异步操作中取消操作(进度条)。
我有一个正在显示操作进度的类ProgressBar。它有一个取消按钮(通常是生成的Friend WithEvents,并具有Private Sub ButtonCancel_click)。没什么特别的。
取消设置公开CancelButtonHasBeenPressed。
我希望能够在另一堂课中对按下取消做出反应。
我读到了添加处理程序以响应事件,并在操作结束时删除处理程序,这就是我应该做的事情。
类似的东西:
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
上面代码/伪代码的问题:
1)在AddHandler中,我应该添加一个存在的事件,这个事件与实际取消相关 - 但ProgressBar中没有任何内容,就是这样做 - 如何添加取消?我只有一个取消按钮......所以我不得不将button_click公开,这可能是错误的......
不知怎的,我以为用户按下取消会触发该事件......这不是真的吗?我对此真的很陌生,在所有的例子中,网络似乎都假设看到这些例子的人已经是专家了。
2)如何检查事件是否已被引发?
当我尝试输入“If”后跟一个事件名称时,Intellisense会以任何形式告诉我这是错误的。
请帮我开始吧!
谢谢。
答案 0 :(得分:0)
您是否考虑过使用BackgroundWorker?它支持进度事件和取消。
另外,请勿在{{1}}函数中使用ByRef
。如果维护代码的人没有意识到参数是Mine
,那么这不是必需的,可能会导致细微的错误。