我正试图找出一种方法来使用事件,处理程序-从异步操作中取消操作(进度条)。
我有一个类ProgressBar,它显示操作的进度。它有一个取消按钮(它是Friend WithEvents,通常是生成的,并且有一个Private subbuttoncancel_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设为Public这可能是错误的。
不知何故,我认为用户按下Cancel会触发该事件…这不是真的吗?在这方面,我真的是新手,而在所有的例子中,网络似乎都假设,看这些例子的人已经是专家了。
2)如何检查事件是否被触发?
当我试着输入"如果",后面跟着一个事件名称,以任何形式,智能感知一直告诉我这是错误的。
请帮我开始吧!
谢谢。
你考虑过使用BackgroundWorker吗?它支持进度事件和取消。
顺便说一句,不要在Mine
函数中使用ByRef
。它不是必需的,如果维护你的代码的人没有意识到参数是ByRef
,可能会导致微妙的错误。