一个线程启动了一个方法,然后最后触发事件,事先主窗体frmMain在Load时已经添加了前面的事件对应的处理方法,但是为何有时能正常响应事件,而有时执行到触发事件语句后就直接跳到下一语句,而不执行frmMain中对应的相应事件处理过程,而且更奇怪的是比较程序布置在5个机器上,有3个机器没有出现问题,有2个机器有10%的时间会出现,严重影响执行效果,这是为何? 那2个有出现不响应情况的机器可能使用软件的各功能效率会频繁一点,但也只是频率一点点,而且根本没有任何错误产生,为何会有时出现不响应呢?太奇怪了,难道是那时候原来在frmMain中的事件会和处理过程断开,需要重新再添加? 但往往重新编译后的程序再运行就正常了,但一会又出现事件失效的情况,怪怪怪~ 到底怎么回事啊?不会是MS的Bug吧?对了,事件处理函数中有少量的ui操作,比如设置一些label的文本
我设过断点了,有一次正好被我遇上这种情况,语句执行到触发事件语句时,不执行处理函数,直接转到下一语句执行,且没有任何出错信息输出,简单贴一段vb.net的代码,各位不会介意吧,我想如果用c#应该也会有一样问题的frmMain.vbLoad事件中
  AddHandler Class1.OnPlace , AddressOf Class1_OnPlace---------------
    Public Sub Class1_OnPlace(ByVal tabName As String, ByVal resp as Object)
        If Me.InvokeRequired Then
            Me.Invoke(New Class1.OnPlaceDelegate(AddressOf Class1_OnPlace), New Object() {tabName, resp})
        Else
            'Do Something
            '含有少量UI操作,比如设置Label等
      End If
    End Sub---------------
线程调用方 Class1.vb委托和事件定义:        Public Delegate Sub OnPlaceDelegate(ByVal tabName As String, ByVal resp As object)
        Public Shared Event OnPlace As OnPlaceDelegate触发:
 RaiseEvent OnPlaceBet(m_tabName, resp)

解决方案 »

  1.   

    线程里有catch,失效的时候查过,没有任何异常,直接当没有执行一样转到下一语句,也没有任何信息输出
      

  2.   

    嗯,事件定义是在多线程里,Class1
      

  3.   

    我突然注意到一个细节,就是出问题的事件处理函数用的定义是Public,而几个没有出问题的事件处理过程定义用的是Private,可能是自己写的时候不注意,因为定义的事件处理比较多,并不肯定所有出问题的事件过程都是Public,还需要进一步查证,是否这个问题会引起这种偶然性的问题呢?如例子中的
    Public Sub Class1_OnPlace(ByVal tabName As String, ByVal resp as Object) 
    这个是偶尔会出问题的方法,而其它正常的方法用的定义是
    Private Sub Class1_OnPlace(ByVal tabName As String, ByVal resp as Object) 
      

  4.   

     protected你试过吗?要不你写成别的试试,感觉和这个没什么关系.
      

  5.   

    protected没试过,我现在已经全部改成了private,等这个错误再现后就能知道是否是这个原因了,不然真是想不出是什么原因引起的了
      

  6.   

    同一个类时与访问属性无关:要么不能访问(private/protected)、要么可以访问(public/internal),不该有这种现象,也是第一次听到这种情况。如果真有,恐怕是CLR有问题了。
      

  7.   

    不应该使Public访问属性搞的鬼,
      

  8.   

    事件好像没这个问题吧,也没听说过,是不是别的问题,可能你用了try,那个错误被忽略了
      

  9.   

    我也没听说过这个错误,不过现在就是遇到了,根本不是try的原因,我跟踪过,一切正常,就是RaiseEvent语句跟没执行一个样
      

  10.   

    今天终于验证成功了,想是基本会是系统的原因,但一时又找不到是什么问题引起的,写了一个demo,全是不同的事件触发,然后用一个新的xp镜像重装了系统,再安装完所有安全软件,杀毒,然后运行软件,还是会有同样的偶然性错误,突然想到最近为了安全原因新增加了PGP软件,新增加了一个虚拟加密盘,软件是安装在这个虚拟盘里的,虽然脑子想不就是换了一个安装盘么,但还是试了一下安装在其它实体分区中,结果发现一测试果然没有这个偶然性错误了,真是崩溃,可能CLR在系统启动的时候要从安装目录中初始化一些东西?因为虚拟分区需要在启动时输入密码才能访问,所以初始化什么东西的时候失败了,才引起这个偶然性事件响应失败的?我现在也只有这么想了,希望对前面有同样的问题的朋友有所帮助~
      

  11.   

    正常不会出现这种情况
    可能是你使用多线程定义了多个线程实例
    但是有的定义没有使用关键字WithEvents声明
    这样线程是无法响应事件的