我在一个线程中.引发一个事件的方法是否会有问题.
我是在 vs2003.net做的.public  delegate void  ReceiveHander(object sender,EventData e);//定义委托
public  event ReceiveHander ReceiveAfter; //事件事件的方法:
private void OnReceiverAfter(object sender,EventData e)
{
lock (this)
{
if (this.ReceiveAfter!=null)
{
this.ReceiveAfter(sender,e);
}
}
}//线程部分
this.读串口线程 = new System.Threading.Thread(new System.Threading.ThreadStart(this.Read));//线程的方法
Read()
{
  lock (this)
{
  OnReceiverAfter(;;)  //事件的方法在线程中.会有问题吗?该怎样做.
}
}谢谢.

解决方案 »

  1.   

    >> Read()
    >>  {
    >>     lock (this)问题是没有,但是上面这句lock语句在这里实际上是不必要的吧?OnReceiverAfter里面已经lock一次了。
      

  2.   

    事件的方法里面lock去掉就可以了
    这样做可以实现
      

  3.   

    觉得你写的代码有很多是多余的。
    你这个程序定义了事件,却没有事件订阅。只是用了另一线程来执行一段代码.用函数就可以了!
    用实现异步调用,你可以不有自己创建线程,使用 ReceiveHander.BeginInvoke();
      

  4.   

    觉得你写的代码有很多是多余的。
    你这个程序定义了事件,却没有事件订阅。只是用了另一线程来执行一段代码.用函数就可以了!
    要实现异步调用,你可以不用自己创建线程,使用 ReceiveHander.BeginInvoke();