ホームページ > バックエンド開発 > C++ > C# で Lambda イベント ハンドラーをサブスクライブ解除する方法

C# で Lambda イベント ハンドラーをサブスクライブ解除する方法

Linda Hamilton
リリース: 2025-01-20 09:41:09
オリジナル
231 人が閲覧しました

How to Unsubscribe Lambda Event Handlers in C#?

C# で Lambda イベント ハンドラーをサブスクライブ解除する方法

C# では、匿名ラムダ式を使用してイベント ハンドラーを作成する便利な方法が提供されます。ただし、よくある質問は、これらのイベント ハンドラーを削除またはサブスクライブ解除する方法です。

C# 仕様では、同じコードを持つ 2 つの Lambda 式が等しいデリゲートを生成することは保証されていません。サブスクリプション解除を確実に成功させるには、デリゲート インスタンスを明示的に保存することをお勧めします。

名前付き EventHandler メソッドを使用する

最も簡単な方法は、メソッドを定義し、それをイベント ハンドラーとして割り当てることです。

<code class="language-csharp">public void ShowWoho(object sender, EventArgs e)
{
    MessageBox.Show("Woho");
}

...

button.Click += ShowWoho;
...
button.Click -= ShowWoho;</code>
ログイン後にコピー

デリゲートを使用して変数を保存する

ラムダ式を使用して自動削除イベント ハンドラーを作成するには、デリゲートを使用して変数を保存できます。

<code class="language-csharp">EventHandler handler = null;
handler = (sender, args) =>
{
    button.Click -= handler; // 取消订阅
    // 在此处添加仅执行一次的代码
};
button.Click += handler;</code>
ログイン後にコピー

ヘルパー メソッドを使用する

イベント表現の制限のため、ヘルパー メソッドを使用してイベント ハンドラーをカプセル化することはできませんが、汎用デリゲートは解決策を提供できます。

<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>(
    (sender, args) =>
    {
        // 此处添加仅执行一次的代码
    },
    handler => button.Click -= handler);</code>
ログイン後にコピー

これらの方法に従うことで、開発者は Lambda イベント ハンドラーを効果的に削除し、適切なイベント管理とイベント サブスクリプションのライフサイクルの制御を確保できます。

以上がC# で Lambda イベント ハンドラーをサブスクライブ解除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート