2

これがC#でイベントをトリガーする方法かどうかはわかりません:

public event EventHandler<ActionEventArgs> ActionDataReceived;

public void showLog(string logMessage)
{
   ActionDataReceived(this, new ActionEventArgs(logMessage));
}
4

2 に答える 2

5

安全な方法は、ハンドラーのコピーを取得し、代わりにそれを発生させることです。

var handler = ActionDataReceived;
if (handler != null)
{
    handler(this, new ActionEventArgs(logMessage));
}

これにより、イベントを発生させる前に割り当てが解除される可能性がある競合状態が軽減されます。


@EricLippert が指摘したように、これは、割り当てが発生したにハンドラーの内部状態が変更されるシナリオをカバーしていません。

于 2013-05-07T07:41:21.980 に答える
0
var temp = ActionDataReceived;
if (temp != null)
      temp();

詳細な説明については、Eric Lippert のこの投稿を参照してください。

于 2013-05-07T07:42:55.923 に答える