SetEventtoNull我有这样的代码:publicclassSomeClass{int_processProgress;publicintProcessProgress{get{return_processProgress;}设置{_processProgress=值;如果(ProcessProgressChanged!=null)ProcessProgressChanged(值);}}publicdelegatevoidProcessProgressChangedEventHandler(intprogressPercentage);公共事件ProcessProgressChangedEventHandlerProcessProgressChanged;publicvoidClearProcessProgressChangedEvent(){this.ProcessProgressChanged=null;当我调用ClearProcessProgressChangedEvent()方法时,它会取消订阅ProcessProgressChanged事件中的所有方法?我的代码在C#中,框架4,在VS2010Pro中构建,项目在Winforms中。请帮忙。提前致谢。嗯,它会有效地清除订阅者列表,是的(通过将底层委托字段设置为null)-这样下次设置ProcessProgress时,不会调用任何处理程序。它并没有真正将事件设置为空——它只是将基础字段设置为空。只是C#编译器使用单个声明创建事件(订阅/取消订阅方法对)和字段(存储处理程序)。您可能会发现我关于事件和委托的文章很有用。请注意,您的事件引发代码目前不是线程安全的。我不知道是否需要,但您可能要考虑使用:set{_processProgress=value;varhandlers=ProcessProgressChanged;如果(处理程序!=null){处理程序(值);这样如果在null检查之后但在从最后一个处理程序调用Unsubscribe之前,您将不会得到NullReferenceException。是的,它将取消订阅活动中的每个人。这是一个(有点间接恕我直言)参考:当所有订阅者取消订阅事件时,发布者类中的事件实例设置为null。以上就是C#学习教程的全部内容:设置事件为空。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
