-1

我已将代码简化为单一形式,如下所示:

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

Me.Invoke(sub() ...执行 Sub Test 时,它会挂起。没有错误被抛出,并且没有在事件查看器中写入任何内容。

即使我按 F11,Debug Into,它也会挂起。

有任何想法吗?

谢谢

J.P

4

1 回答 1

1

发现问题。

主线程正在等待另一个线程完成。

t.Wait()

主线程上的调用需要等待,所以出现了死锁。

于 2014-08-21T10:59:03.270 回答