次のコードシナリオが必要になることがよくあります
イベントに申し込む -> イベントを待つ -> イベントから退会します。
以下よりも良い方法はありますか?
myEvent += mydelegate;
while (mydelegatewasn't called)
{
// do stuff
}
myEvent -= mydelegate;
また、代理人が作業を完了するのを待つ最良の方法は何ですか?
次のコードシナリオが必要になることがよくあります
イベントに申し込む -> イベントを待つ -> イベントから退会します。
以下よりも良い方法はありますか?
myEvent += mydelegate;
while (mydelegatewasn't called)
{
// do stuff
}
myEvent -= mydelegate;
また、代理人が作業を完了するのを待つ最良の方法は何ですか?
AutoResetEvent
while ループでスピンする代わりに、クラスを調べて、デリゲートが作業を完了するのを待つことを検討することをお勧めします。これにより、デリゲートが終了するのを待っている間のスピンを回避できます。
void Main()
{
RunActionOnceOnEvent(delegate()
{
// do stuff
});
}
void RunActionOnceOnEvent(Action action)
{
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
EventDelegate handler = delegate()
{
autoResetEvent.Set();
});
myEvent += handler;
try
{
autoResetEvent.WaitOne();
action();
}
finally
{
myEvent -= handler;
}
}
さまざまなイベントのボイラープレート コードの量を削減するという点では、イベントは一流ではないため、多くのことができるかどうかはわかりません。