簡體   English   中英

C#使用其他參數附加事件處理

[英]C# attach event handling with additional parameters

前言

我有一個Windows窗體按鈕,公開事件OnClick(對象發送器,EventArgs e)。 在我的應用程序中,我可以通過使用C#的經典事件處理技術來處理這個問題:

// Button Creation
Button button = new Button();
button.Click += MyEventHandler;

然后Windows窗體向我詢問具有以下簽名的處理程序:

public void MyEventHandler(object sender, EventArgs e) { }

假設我想使用lambda表達式來執行此操作,我可以使用以下語法:

button.Click += (sender, args) =>
{
  // execute the code
};

這樣做的缺點是我無法取消訂閱Lambda表達式。

我想要做的是有一個實用程序類,允許我處理任何Click事件,並使用額外的Action作為參數。 所以我想寫這樣的東西:

button.Click += MyUtility.Click(() 
    => {
        // the custom code the Click event will execute
    })

我能以某種方式做到嗎?

您可以將lambda表達式分配給局部變量或字段。

例如:

EventHandler handler = (sender, args) =>
{
  // execute the code
};

button.Click += handler;
button.Click -= handler;

如果要在處理程序內部取消訂閱,則需要將handler分配給null ,然后分配給lambda,以避免明確的賦值問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM