请教,C#通过委托定义事件的时候,检查事件,发现为空?

owin_lin 2009-08-28 02:51:05
//定义的委托
public delegate void VerifyComIDHandle(string callerID, string ComID, int telChan);
public delegate void OnRingHandle(int telChan, string callerID, string ComId);
public delegate void ConnectErrorHandle(string ErrorMsg);
public delegate void OutLineHangUpHandle(DateTime TimeHangUp);
public delegate void ConectSucceedHandle();


//定义的事件
public event VerifyComIDHandle VerifyComID;
public event OnRingHandle OnRing;
public event ConnectErrorHandle ConnectError;
public event OutLineHangUpHandle OutLineHangUp;
public event ConectSucceedHandle ConnectSucceed;


定义的事件中,在程序里面检查,发现 VerifyComID和 OutLineHangUp都为空,其处理都是一样的,为什么会有两个为空呢?
...全文
1218 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
owin_lin 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dobzhansky 的回复:]
在类内部需要激发事件的地方调用函数

OnVerifyComID


就可以了

[/Quote]

可以使用了,谢谢
owin_lin 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dobzhansky 的回复:]
对于事件
public event VerifyComIDHandle VerifyComID;   

在你的类内部写个激发的函数:

protected virtual void OnVerifyComID(string callerID, string ComID, int telChan)
{
  if (null != VerifyComID)
    VerifyComID(callerID, ComID, telChan);
}

对了, 你的事件参数最好自定义一个, 派生自 EventArgs, 那样规范一些

public class VerifyComIDEventArgs : EventArgs
{
  string _callerID;
  string _ComID;
  int _telChan
  // 只可内部构造
  internal VerifyComIDEventArgs(....)
  {
    ....
  }

  // 属性实现
  public string CallerID {get;}
  public string ComID {get;}
  public int TelChan{get;}
}

[/Quote]

明白,我先试试
bbqqqbq 2009-08-28
  • 打赏
  • 举报
回复
建议先理清楚自己要干什么。。。
Dobzhansky 2009-08-28
  • 打赏
  • 举报
回复
在类内部需要激发事件的地方调用函数

OnVerifyComID


就可以了
Dobzhansky 2009-08-28
  • 打赏
  • 举报
回复
对于事件
public event VerifyComIDHandle VerifyComID;

在你的类内部写个激发的函数:

protected virtual void OnVerifyComID(string callerID, string ComID, int telChan)
{
if (null != VerifyComID)
VerifyComID(callerID, ComID, telChan);
}

对了, 你的事件参数最好自定义一个, 派生自 EventArgs, 那样规范一些

public class VerifyComIDEventArgs : EventArgs
{
string _callerID;
string _ComID;
int _telChan
// 只可内部构造
internal VerifyComIDEventArgs(....)
{
....
}

// 属性实现
public string CallerID {get;}
public string ComID {get;}
public int TelChan{get;}
}
owin_lin 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dobzhansky 的回复:]
定义了事件, 没有人来订阅她, 就是空的了,

new 你的对象后, 订阅一下

如:
  VerifyComID += .....
[/Quote]

dobzhansky同学,我这里是分两个模块,我是模块A,我要发起VerifyComID,让模块B来响应我这个VerifyComID,之前没说清楚,不好意思
owin_lin 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jy251 的回复:]
.....

你应该用过form_load(object sender,systemevent e)这样的事件了吧。

想以想,你在用这个事件之前做过什么??
是不是form.load += new eventhandl(form_load)?
+= 你可以看成是给你的load事件实例化,并且指定一个函数。只不过 += 你需要注意,他不是 = 那样的只是指定一个,而是挂入一个事件链表。

因此你的事件在你的类中调用之前,必须判断是否为空。
比如 public event OnRingHandle OnRing;   
if( OnRing != unll )
OnRing();
[/Quote]

我的目的是要发出这个事件,而不是响应这个事件,谢谢
jy251 2009-08-28
  • 打赏
  • 举报
回复
.....

你应该用过form_load(object sender,systemevent e)这样的事件了吧。

想以想,你在用这个事件之前做过什么??
是不是form.load += new eventhandl(form_load)?
+= 你可以看成是给你的load事件实例化,并且指定一个函数。只不过 += 你需要注意,他不是 = 那样的只是指定一个,而是挂入一个事件链表。

因此你的事件在你的类中调用之前,必须判断是否为空。
比如 public event OnRingHandle OnRing;
if( OnRing != unll )
OnRing();
Dobzhansky 2009-08-28
  • 打赏
  • 举报
回复
同样, 类里头的事件激发地方, 也要判断一下是否为空, 再激发
Dobzhansky 2009-08-28
  • 打赏
  • 举报
回复
定义了事件, 没有人来订阅她, 就是空的了,

new 你的对象后, 订阅一下

如:
VerifyComID += .....
cwaspnet 2009-08-28
  • 打赏
  • 举报
回复
调试调试下

110,566

社区成员

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

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

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