この質問をした後、イベントが発生するのを待ってから、イベントデータを取得してその一部を返すことができるかどうか疑問に思っています。このような並べ替え:
private event MyEventHandler event;
public string ReadLine(){ return event.waitForValue().Message; }
...
event("My String");
...elsewhere...
var resp = ReadLine();
提供するソリューションが何であれ、他のものから値を取得するのではなく、値を直接返すことを確認してください。上記の方法が何らかの方法で利用できるかどうかを尋ねています。Auto/ManuelResetEvent については知っていますが、上記のように値を直接返すことは知りません。
更新:MyEventHandler
(フィールドを含む)を使用してイベントを宣言しましたMessage
。ReadLine
イベントが発生するのを待つという別のスレッドにメソッドがあります。イベントが発生すると、WaitForValue メソッド (イベント処理シーンの一部) は、メッセージを含むイベント引数を返します。その後、メッセージは ReadLine によって呼び出されたものに返されます。
私が尋ねたその質問に対する受け入れられた答えは、私がしたことでしたが、それはまったく正しいとは思えません. ManuelResetEvent が発火してから、プログラムがデータを取得して返すまでの間に、データに何かが起こりそうな気がします。
更新:の主な問題は、Auto/ManualResetEvent
脆弱すぎることです。スレッドはイベントを待機し、他の誰かがそれを取得するのに十分な時間を与えずに、別のものに変更する可能性があります。ロックなどを使用する方法はありますか?おそらく、get ステートメントと set ステートメントを使用します。