なぜこの宣言+割り当てがエラーを起こすん使用自体に閉じて匿名関数を作成
SessionEndingEventHandler handler = null;
handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
では、直感的です最初のステートメントはエラーを引き起こすが、2番目のステートメントがなぜそうでないのかをすぐには明らかにしてはならない。
の呼び出し後にSystemEvents.SessionEnding
イベントが実際に登録解除されているかどうかを確認するにはどうすればよいですか? GetInvocationList
はデリゲートでのみ動作します。
SystemEvents.SessionEnding += handler;
handler(null, null);
最初のステートメントは 'SessionEndingEventHandler handler;'と同等ですが、2番目のステートメントではnullに割り当てます。ラムダが完全に構築されるまでその割り当てられていない。 http://stackoverflow.com/questions/1362204/how-to-remove-a-lambda-event-handlerを参照してください。 –