【发布时间】:2023-03-15 19:47:01
【问题描述】:
我在从非 UI 线程引发的事件方面遇到一些问题,因为我不希望在 Form1 中添加到线程的每个事件处理程序上都处理 If me.invokerequired。
我确定我已经在某处阅读过如何使用委托事件(在 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
【问题讨论】:
标签: c# vb.net multithreading