首页 新闻 会员 周边

事件 EventHandler是否已注册问题。

0
悬赏园豆:10 [已解决问题] 解决于 2016-12-29 16:41
1:申明事件

public event EventHandler<ReplaceMaterietChangedEventArgs> ReplaceMaterietChanged;

2:注册事件

        public void RegisterMateriet()
        {
            frmMain.GetInstance.ReplaceMater.Value.ReplaceMaterietChanged -= ReplaceMaterietChanged;
            frmMain.GetInstance.ReplaceMater.Value.ReplaceMaterietChanged += ReplaceMaterietChanged;
        }

在不借助第3方变量的情况下 如何知道

frmMain.GetInstance.ReplaceMater.Value.ReplaceMaterietChanged 

已经注册了事件呢?

因为RegisterMateriet在某个动作触发时候才执行注册。这个动作可能会多次触发 而我又不想第一次load的时候 就注册。

s_p的主页 s_p | 初学一级 | 园豆:138
提问于:2016-11-30 09:09
< >
分享
最佳答案
0

  int flag=0;

        public void RegisterMateriet()
        {

  if(Interlocked.CompairExchange(ref flag,1,0)==0)
            {

    //..register your event

    }
        }

收获园豆:6
Daniel Cai | 专家六级 |园豆:10424 | 2016-11-30 09:20
其他回答(1)
0
ReplaceMaterietChanged != null && ReplaceMaterietChanged.GetInvocationList().Length > 0

 

收获园豆:4
ArthurLi | 园豆:686 (小虾三级) | 2016-11-30 09:25

还是借助变量解决了  这个有问题

错误 10 事件xxx.ReplaceMaterieList.ReplaceMaterietChanged”只能出现在 += 或 -= 的左边(

类似楼上的那个思路

支持(0) 反对(0) s_p | 园豆:138 (初学一级) | 2016-11-30 09:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册