日期:2014-05-19  浏览次数:20831 次

关于自定义事件的一个小问题
using   System;
using   System.Text;
using   System.Threading;
using   COMRD800Lib;

namespace   XZK
{
///   <summary>
///   Reader_Carder   的摘要说明。
///   </summary>
///  
public   delegate   void   Read_Event_Handler(object   sender);  
public   class   Reader_Carder
{
RD800Class     rd   =   new   RD800Class();
 
///   <summary>
///   返回卡序列号
///   </summary>

public   Reader_Carder()
{
ReadCarder();
}
#region   初始化串口

public   bool   ComOpen()
{
if(rd.dc_init(100,115200)> 0)
{
return   true;
}
else
{
return   false;
}
}

#endregion

#region   关闭串口

public   bool   ComClose()
{
if(rd.dc_exit()   ==   0)
{
return   true;
}
else
{
return   false;
}
}
#endregion

#region   蜂鸣
public   bool   ComSound(int   times)
{
if(rd.dc_beep(Convert.ToInt16(times))   > =   0)
{
return   true;
}
else
{
return   false;
}
}
#endregion  

#region   读卡
///   <summary>
///   读卡
///   </summary>
///   <returns> 卡序列号 </returns>
private   void   ReadCarder()
{
this.ComClose();
if(this.ComOpen())
{
while(true)
{
object   data   =   null;
if(this.rd.dc_card(100,ref   data)   ==   0)
{
Read   rd   =   new   Read();
rd.ReadText   =   data.ToString();
this.ComSound(10);
this.ComClose();
return;
}
}
}
}
#endregion
}
public   class   Read
{
public   event   Read_Event_Handler   Read_Event   =   null;
private   string   _ReadText   =   " ";
public   string   ReadText
{
set
{
_ReadText   =   value;
Read_Event(this);
}
}
public   Read()
{
Reader_Carder   rc   =   new   Reader_Carder();
}
}
}
--------------------------------
上面是代码,我对这不熟悉,程序只要一运行到Read_Event(this);就提示“未将对象引用设置到对象的实例”,望各位能指点一下,谢谢

------解决方案--------------------
Read_Event
改成
if(Read_Event != null)
{
Read_Event(this);
}

你的调用过程里要挂上这个事件
------解决方案--------------------
public event Read_Event_Handler Read_Event = null;//你的Read_Event 变量没有实例化,当然就没有Read_Event(this);的调用了。
------解决方案--------------------
楼上正解

委托没有实例化,也就是没有注册事件,也就是为null当然不能操作了