0

我试图找出一种使用事件、处理程序的方法——从异步操作中取消操作(进度条)。

我有一个类 ProgressBar,它显示操作的进度。它有一个 Cancel 按钮(它是 Friend WithEvents,通常生成,并且有一个 Private Sub ButtonCancel_click)。没什么特别的。

Cancel 设置一个公共的 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 一直告诉我这是错误的。

请帮我开始!

谢谢你。

4

1 回答 1

0

您是否考虑过使用BackgroundWorker?它支持进度事件和取消。

顺便说一句,不要ByRef在你的Mine函数中使用。这不是必需的,如果维护您的代码的人没有意识到参数是ByRef.

于 2013-03-20T16:50:46.377 回答