TL; DR:すべてのイベントが発生することがわかっていても、多くのイベントに関連付けられたハンドラを1回だけ起動できますか?複数のイベント、1つのハンドラが1回だけ呼び出される
私は特定のタスクを完了し、それが完了したことを所有者に通知するオブジェクトのコレクションを聴きようとしています。これを行うために、単にコレクションをループし、各オブジェクトにイベントハンドラを追加しました。
foreach(var obj in collection)
{
obj.Event += GroupHandler;
}
これは問題なく動作します。しかし、私はタスクが同じ時間に完了することを知っているので、少し早く待ち行列に入れるかどうかは関係ありませんから、GroupHandlerを一度上げれば、もう一度上げることはできません私はのような何かを行うことができます設定し、現在の実行のために:
private void GroupHandler(object sender, EventArgs e)
{
foreach(var obj in collection)
{
obj.QueueNext();
}
}
理想的には私が
private void GroupHandler(object sender, EventArgs e)
{
if(GroupHandler.HasRun) return;
foreach(var obj in collection)
{
obj.QueueNext();
}
}
のようなもので終わるだろうと私はいくつかのグローバルブール値(またはそれ以上の可能性がint型を使用することができることを知っていますサイクルを追跡するために)、私はそれを解決策としては嫌いです。私はそれより少し素敵なものを探しています。
最初の呼び出しでオブジェクトからイベントを切り離します。 – Gusman
しかし、私はそれらを後でもう一度持ち上げてほしいです。おそらく道路の15-20秒後 –
それらを再接続しますが、私はあなたが問題の見落としをしていると信じています。 – Gusman