2009-06-16 47 views
5

VB .NETでは、RaiseEvent X()を呼び出すと、イベントXを非同期または同期で処理する関数が処理されます。私はRaiseEventとイベントの処理が他のスレッドで明示的に作成されていない限り同期的であったという印象を受けました。私は別の言い方をしました。イベントハンドラは非同期で処理されますか?

答えて

6

イベントは、デフォルトで同期的に発生します。 MulticastDelegatesは非同期呼び出しをサポートするように設計されているため、イベントの呼び出しリスト内のデリゲートを非同期で呼び出すことは可能ですが、これはデフォルトの動作ではありません。私はまた、いくつかのテストをしました

2

...

Public Sub MyHandler() Handles Complete 
    MsgBox("My Handler - Beginning 5 second sleep") 
    Threading.Thread.Sleep(5000) 
    MsgBox("My Handler - Awoken") 
End Sub 


Public Sub SomeFunction() 
    MsgBox("Some function - Raising Event") 
    RaiseEvent Complete() 
    MsgBox("Some function - After Event") 
End Sub 

出力:
一部機能 - 上げるイベント
マイハンドラ - 以降5秒スリープ
マイハンドラ - 目覚め
いくつかの機能 - 後イベント

関連する問題