在什么情况下取消事件注册

TANGLIJUNASP 2010-08-25 11:24:43
在什么情况下取消事件注册???谢谢!
...全文
143 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
TANGLIJUNASP 2010-08-25
  • 打赏
  • 举报
回复
是呀,结完了我就没分了
qiuxin425 2010-08-25
  • 打赏
  • 举报
回复
LZ结贴还真快,不过好像还有13个没有结贴了吧,快点吧 (*^__^*) 嘻嘻……
TANGLIJUNASP 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyazhe 的回复:]
引用 7 楼 gomoku 的回复:


是这样的,我以前做过一个类库,我希望类库具有绝对的健壮性,我希望外面使用我类库的人能不论是否正确的方式操作,类库都不出错,类库本身是一个长时间驻留内存的串口操作类,可能多个界面启动,在类中注册,当界面关闭时候,如果没有正确的先释放,那在类库中,使用观察者模式对注册方调用的时候就会出现异常,没错,就是你说的ObjectDisposedException……
[/Quote]
wuyazhe
很精辟,长见识了,谢谢!
兔子-顾问 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gomoku 的回复:]
[/Quote]

是这样的,我以前做过一个类库,我希望类库具有绝对的健壮性,我希望外面使用我类库的人能不论是否正确的方式操作,类库都不出错,类库本身是一个长时间驻留内存的串口操作类,可能多个界面启动,在类中注册,当界面关闭时候,如果没有正确的先释放,那在类库中,使用观察者模式对注册方调用的时候就会出现异常,没错,就是你说的ObjectDisposedException。

这种对调用方的“爱护”甚至“溺爱”可能的确不是好方法,会助长使用类库的人不好的习惯,粗心使用。但我希望类库更健壮,而且我希望独立的写日志,那我需要

try
{
//something
调用事件
//something
}
catch
{
记录错误日志
}


如果某个事件外面忘记释放了,我这里没处理,就会反复的发生异常导致效率降低,我的做法就是发现InvalidOperationException,我就把这个事件反注册,不要了。避免后续的错误。

不同情况不同处理吧。因为我这里除了拦截这些异常,我还需要处理自己内部的异常,不过当然是有方法实现,比如:

try
{
//something
调用事件
//something
}
catch(InvalidOperationException)
{
throw;
}
catch
{
记录错误日志
}

只是当时没那么想,不过吧这样的异常扔出去也行。没问题。
bloodish 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tanglijunasp 的回复:]
取消事件注册后,是不是重新触发该事件时,就不管用了;难倒还需要重新注册吗?
[/Quote]

有的时候我们不希望某个事件多次触发同一个事件处理函数,需要取消注册.

比如
Form form;
//先注销
form.Load -= (sender,e)=>{Console.WriteLine("Loading...");};
//再注册
form.Load += (sender,e)=>{Console.WriteLine("Loading...");};

TANGLIJUNASP 2010-08-25
  • 打赏
  • 举报
回复
谢谢大家的支持,不注销,会引发很多的问题?
TANGLIJUNASP 2010-08-25
  • 打赏
  • 举报
回复
取消事件注册后,是不是重新触发该事件时,就不管用了;难倒还需要重新注册吗?
gomoku 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
如果是你注册了,没必要注销,如果希望停止对事件的响应,可以注销。另外,如果从类库的角度说,你发现注册的事件中,某个对象已经被释放了,你可以吧这个事件从事件列表中移除。
[/Quote]
我有不同的意见。
类库不应移除事件,而是继续调用,从而抛出类似ObjectDisposed等异常,使程序员有更多机会,更早地发现并改正逻辑错误。
兔子-顾问 2010-08-25
  • 打赏
  • 举报
回复
如果是你注册了,没必要注销,如果希望停止对事件的响应,可以注销。另外,如果从类库的角度说,你发现注册的事件中,某个对象已经被释放了,你可以吧这个事件从事件列表中移除。
一克代码 2010-08-25
  • 打赏
  • 举报
回复
自己觉得不需要的时候!
qiuxin425 2010-08-25
  • 打赏
  • 举报
回复
不用的时候呀

顺便说一句,LZ的结贴率真高呀,这样的比例比0%的都可怕!
q107770540 2010-08-25
  • 打赏
  • 举报
回复
当你的结帖率达到100%的时候!
酋长 2010-08-25
  • 打赏
  • 举报
回复
不用的时候
gomoku 2010-08-25
  • 打赏
  • 举报
回复
你对那个事件不感兴趣了的时候。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧