Tvd*_*Tvd 13 c# events event-handling
众所周知,我们可以创建一个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;
Run Code Online (Sandbox Code Playgroud)
更新:
// To remove it should be
monitorInternet.InternetConnectionAvailableEvent -= HandleInternetConnectionEvent; // CORRECT
Run Code Online (Sandbox Code Playgroud)
可以多次调用相同的方法而不删除它.
如果我创建monitorInternet.InternetConnectionAvailableEvent -= null;,则删除所有事件处理程序.我的意思是如果设置2-3次,并且只删除一次,通过使其为null,也将自动删除所有其他方法.
我相信它会,但我只是想和你们专家确认一下.谷歌搜索时,我没有得到我所要求的满意答案.
如果我错了,请纠正我.
age*_*t-j 13
要查找事件处理程序的数量,您可以使用以下代码:
InternetConnectionAvailableEvent.GetInvocationList().Length;
Run Code Online (Sandbox Code Playgroud)
以下代码演示了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
}
Run Code Online (Sandbox Code Playgroud)
要清除列表(这可能永远不是一个好主意),您可以将事件设置为null(只要您在声明事件的类中).
| 归档时间: |
|
| 查看次数: |
10387 次 |
| 最近记录: |