一个线程启动了一个方法,然后最后触发事件,事先主窗体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)
我设过断点了,有一次正好被我遇上这种情况,语句执行到触发事件语句时,不执行处理函数,直接转到下一语句执行,且没有任何出错信息输出,简单贴一段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)
Public Sub Class1_OnPlace(ByVal tabName As String, ByVal resp as Object)
这个是偶尔会出问题的方法,而其它正常的方法用的定义是
Private Sub Class1_OnPlace(ByVal tabName As String, ByVal resp as Object)
可能是你使用多线程定义了多个线程实例
但是有的定义没有使用关键字WithEvents声明
这样线程是无法响应事件的