我已将代码简化为单个表单,如下所示:
Imports System.Threading.Tasks
Public Class frmTest
Inherits Form
Public Sub WorkerSub(oAction As action)
Dim x = 0
oAction.Invoke()
x += 1
End Sub
Private Sub Test()
If Me.InvokeRequired Then
Me.Invoke(Sub()
Test()
End Sub)
Else
MsgBox("Test")
End If
End Sub
Private Sub btnTrigger_Click(sender As Object, e As EventArgs) Handles btnTrigger.Click
Dim tt As Task = Task.Factory.StartNew(Sub()
WorkerSub(AddressOf Test)
End Sub)
tt.Wait()
' Never arrives here
Stop
End Sub
End Class
执行Sub Test中的Me.Invoke(sub() ...
时,它会挂起。没有错误抛出&事件查看器中没有任何内容。
即使按F11,Debug Into,它也会挂起。
任何想法?
由于
JP
答案 0 :(得分:1)
找到了问题。
主线程正在等待另一个线程完成。
t.Wait()
主线程上的调用需要等待,因此存在死锁。