これがC#でイベントをトリガーする方法かどうかはわかりません:
public event EventHandler<ActionEventArgs> ActionDataReceived;
public void showLog(string logMessage)
{
ActionDataReceived(this, new ActionEventArgs(logMessage));
}
これがC#でイベントをトリガーする方法かどうかはわかりません:
public event EventHandler<ActionEventArgs> ActionDataReceived;
public void showLog(string logMessage)
{
ActionDataReceived(this, new ActionEventArgs(logMessage));
}
安全な方法は、ハンドラーのコピーを取得し、代わりにそれを発生させることです。
var handler = ActionDataReceived;
if (handler != null)
{
handler(this, new ActionEventArgs(logMessage));
}
これにより、イベントを発生させる前に割り当てが解除される可能性がある競合状態が軽減されます。
@EricLippert が指摘したように、これは、割り当てが発生した後にハンドラーの内部状態が変更されるシナリオをカバーしていません。
var temp = ActionDataReceived;
if (temp != null)
temp();
詳細な説明については、Eric Lippert のこの投稿を参照してください。