C# 事件销毁问题,设备开发,控件开发,委托管理 窗体正在关闭时有FormClosing事件,关闭后有FormClosed事件。可以在这些事件的处理代码中进行这种处理。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注册窗体的Close事件。在Close的时候释放。或是参考我以前这样的设计:http://topic.csdn.net/u/20100825/11/db5a0da2-5f8c-4f27-ac95-1cf06691c104.html这里11楼的回复 不要在Closing事件中释放,这个时别人做的,我只负责设备这块别人的使用就和控件的事件一样用, Form没有属性表明窗体是否已关闭。IsDisposed属性指明的是是否销毁。 个人观点:没必要执着于检查窗体的状态,在FormClosing事件或FormClosed事件的处理方法中处理就很好。 if (OnUKInsert != null)//OnUKInsert是设备插入事件 { //object ojb1 = OnUKInsert.Target; foreach (Delegate dlt in OnUKInsert.GetInvocationList()) { object obj = OnUKInsert.Target; //下面两步如何做到? if(关闭) OnUKInsert -= new UKInsertHandler(对象的方法); } OnUKInsert(); } if (OnUKInsert != null)//OnUKInsert是设备插入事件{ List<UKInsertHandler> errorList = new List<UKInsertHandler>(); //安全的调用事件 foreach (UKInsertHandler dlt in OnUKInsert.GetInvocationList()) { try { dlg.Invoke(); } catch { errorList.Add(dlt); } } //移除已经无效的事件 foreach(UKInsertHandler del in errorList) { OnUKInsert -= del; } OnUKInsert();} 这个好像不行哦,winform窗体关闭了,事件还是可以用的,这个问题只有用反射哦 你简直一锅浆糊。事件调用的时候加try,catch,发现注册事件的对象释放或不存在了,则注销事件。不继续解释了。 在配置文件里连sql2005 请叫一个问题 DataGridView行改变时发生的事件 能不能根据当前鼠标所在的位置取得当前位置的控件 在C#请问软件的注销功能如何实现? webbroswer word 工具栏 菜单栏 消失 急,如何重写webbrowser控件的打印 关于main( string args )的棘手问题 制作setup文件时,如何多对注册表进行操作? C#打印xps文档后窗口大小及文字异常 新手请教 如何使DropDownlist显示指定的值?
http://topic.csdn.net/u/20100825/11/db5a0da2-5f8c-4f27-ac95-1cf06691c104.html
这里11楼的回复
别人的使用就和控件的事件一样用,
if (OnUKInsert != null)//OnUKInsert是设备插入事件
{
//object ojb1 = OnUKInsert.Target;
foreach (Delegate dlt in OnUKInsert.GetInvocationList())
{
object obj = OnUKInsert.Target;
//下面两步如何做到?
if(关闭)
OnUKInsert -= new UKInsertHandler(对象的方法);
}
OnUKInsert();
}
{
List<UKInsertHandler> errorList = new List<UKInsertHandler>();
//安全的调用事件
foreach (UKInsertHandler dlt in OnUKInsert.GetInvocationList())
{
try
{
dlg.Invoke();
}
catch
{
errorList.Add(dlt);
}
}
//移除已经无效的事件
foreach(UKInsertHandler del in errorList)
{
OnUKInsert -= del;
}
OnUKInsert();
}
事件调用的时候加try,catch,发现注册事件的对象释放或不存在了,则注销事件。不继续解释了。