我遇到了一些问题,从非UI线程引发的事件,我不希望必须处理如果me.invokerequired每个事件处理程序添加到在Form1中的线程。从线程安全地提高事件
我确定我已经阅读过某处如何使用委托事件(在SO上),但我无法找到它。
Public Class Form1
Private WithEvents _to As New ThreadedOperation
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
_to.start()
End Sub
Private Sub _to_SomthingHappend(ByVal result As Integer) Handles _to.SomthingHappend
TextBox.Text = result.ToString //cross thread exception here
End Sub
End Class
Public Class ThreadedOperation
Public Event SomthingHappend(ByVal result As Integer)
Private _thread As Threading.Thread
Public Sub start()
If _thread Is Nothing Then
_thread = New Threading.Thread(AddressOf Work)
End If
_thread.Start()
End Sub
Private Sub Work()
For i As Integer = 0 To 10
RaiseEvent SomthingHappend(i)
Threading.Thread.Sleep(500)
Next
End Sub
End Class
我已经与第二个建议,传递主机控制(我传入一个控制对象,而不是一个表单,虽然)。谢谢 – Pondidum 2008-11-15 20:49:23