2009-05-17 3 views
3

でネイティブプロセスによって作成されたグローバルのイベント、私が作成したグローバルイベントを持っており、このように作成されたネイティブC++過程でセット/リセットを鑑賞しますNET(C#)プロセスでこれらのイベントの1つに登録すると、グローバルイベントが変更されたときに標準の.NETイベントハンドラが起動されます。
そして、私はイベントとループを待ちたいとは思っていません.WitForSingleObjectを使ったC++と同じように、私は本当に完全に非同期のイベントハンドラにしたいと思います。.NETプロセス

私はこれを行う簡単な方法があると想像しなければなりません...それを見つけることはできません。

答えて

6

ThreadPool.RegisterWaitForSingleObjectイベントが通知されたときにコールバックを実行するために使用できます。文字列名をとるEventWaitHandle constructorを使用して、指定されたイベントオブジェクトのWaitHandleを取得します。

bool createdNew; 
WaitHandle waitHandle = new EventWaitHandle(false, 
    EventResetMode.ManualReset, @"Global\MyEvent", out createdNew); 
// createdNew should be 'false' because event already exists 
ThreadPool.RegisterWaitForSingleObject(waitHandle, MyCallback, null, 
    -1, true); 

void MyCallback(object state, bool timedOut) { /* ... */ } 
+0

EventWaitHandleは、新しいイベントを作成しないで、Win32プロセスで作成されたイベントを開きますか? –

+1

はい、これを検証するために呼び出すことができるコンストラクタのオーバーロードがあります。イベントが既に存在しているか、コンストラクタによって作成されたかを示す 'out' boolパラメータがあります。あなたの場合、outの値はfalseでなければなりません。これを示すためにコードスニペットを更新しました。 –

+0

更新ありがとう...ありがとうございます。これは本当に助けになりました。そして、今、おそらくこの質問への解決策はgoogleに表示されます:) –

関連する問題