-1

次のように、コードを 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

in Sub Test を実行するMe.Invoke(sub() ...とハングします。エラーはスローされず、イベント ビューアには何も書き込まれません。

F11、Debug Into を押してもハングします。

何か案は?

ありがとう

JP

4

1 に答える 1

1

問題が見つかりました。

メインスレッドは別のスレッドが終了するのを待っています。

t.Wait()

メインスレッドでの呼び出しは待機する必要があるため、デッドロックが発生します。

于 2014-08-21T10:59:03.270 に答える