0

イベントやハンドラーを使用して、非同期操作から操作(プログレスバー)をキャンセルする方法を見つけようとしています。

操作の進行状況を表示するクラス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をパブリックにする必要がありました。これはおそらく間違っています...

どういうわけか、ユーザーが[キャンセル]を押すとそのイベントがトリガーされると思っていました...それは本当ではありませんか?私はこれに本当に慣れていません。Webは、すべての例で、それらの例を見ている人々はすでに専門家であると想定しているようです。

2)イベントが発生したことを確認するにはどうすればよいですか?

「If」の後にイベント名を入力しようとすると、どのような形式でも、Intellisenseはそれが間違っていると言い続けました。

始めてください!

ありがとうございました。

4

1 に答える 1

0

BackgroundWorkerの使用を検討しましたか?進行状況イベントとキャンセルをサポートします。

余談ですが、関数で使用しないByRefでくださいMine。これは必須ではなく、コードを保守している誰かがパラメータがであることに気付いていない場合、将来的に微妙なバグにつながる可能性がありますByRef

于 2013-03-20T16:50:46.377 に答える