この宣言+代入がエラーを引き起こすのはなぜですか:
// Use of unassigned local variable 'handler'.
SessionEndingEventHandler handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
これはしませんが:
SessionEndingEventHandler handler = null;
handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
In は、最初のステートメントがエラーを引き起こすべきであることは直観的ですが、2 番目のステートメントがそうでない理由をすぐには明らかにしません。
SystemEvents.SessionEnding
さらに、への呼び出し後にイベントが実際にサブスクライブ解除されたかどうかをどのように確認できhandler(null, null)
ますか? はGetInvocationList
デリゲートでのみ機能します。
SystemEvents.SessionEnding += handler;
handler(null, null);