gpt4 book ai didi

C#知道设置了多少个EventHandlers吗?

转载 作者:可可西里 更新时间:2023-11-01 08:05:58 25 4
gpt4 key购买 nike

众所周知,我们可以创建一个 EventHandler 并向其添加 N 次方法。喜欢:

   // Declare and EventHandler     
public event EventHandler InternetConnectionAvailableEvent;
private void OnInternetConnectionAvailableEvent()
{
if (InternetConnectionAvailableEvent != null)
{
EventHandler handle = InternetConnectionAvailableEvent;

EventArgs e = EventArgs.Empty;
handle(this, e);
}
}


// IN OTHER CLASS WHERE I USE THE EVENT
// Set the method name to handle the event
monitorInternet.InternetConnectionAvailableEvent += HandleInternetConnectionEvent;

void HandleInternetConnectionEvent(object sender, EventArgs e)
{
if (syncContext != null)
{
MonitorInternetConnection mic = (MonitorInternetConnection)sender;
if (mic != null)
{
syncContext.Post(o => InternetConnected(), null);
}
}
}

// To remove
monitorInternet.InternetConnectionAvailableEvent -= null;

更新:

   // To remove it should be 
monitorInternet.InternetConnectionAvailableEvent -= HandleInternetConnectionEvent; // CORRECT

同一个方法可以多次调用而无需删除它。

如果我使 monitorInternet.InternetConnectionAvailableEvent -= null;,所有事件处理程序都会被删除。我的意思是,如果它设置了 2-3 次,并且只删除了一次,通过将其设置为 null,所有其他方法也将自动删除。

我相信会,但我只是想向各位专家确认一下。谷歌搜索时我没有得到我需要的满意答案。

如有不妥请指正

最佳答案

要查找事件处理程序的数量,您可以使用以下代码:

InternetConnectionAvailableEvent.GetInvocationList().Length;

以下代码演示了 MyEvent -= null 不会清除处理程序列表。

public static event EventHandler MyEvent;

[STAThread]
static void Main()
{
MyEvent += (s,dea) => 1.ToString();
MyEvent -= null;

Console.WriteLine(MyEvent.GetInvocationList().Length);
// Prints 1
MyEvent = null;
Console.WriteLine(MyEvent == null);
// Prints true
}

要清除列表(这可能永远不是一个好主意),您可以将事件设置为 null(只要您在声明该事件的类中)。

关于C#知道设置了多少个EventHandlers吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com