vb.net 2010异步报告在GUI中不工作

vb.net 2010异步报告在GUI中不工作,vb.net,asynchronous,Vb.net,Asynchronous,我知道如果我不发布代码,这几乎是不可能回答的,所以我会尝试给出一些例子来帮助解决这个问题,但是 我有一个写的dll,它做一些处理。我有一个异步任务,它可以报告状态消息,比如它当前正在处理的事情。有多个线程运行,每个线程处理不同的事情 现在。。。当我在控制台应用程序中使用DLL时,status.report(“我正在做什么”)工作正常。我在我的控制台应用程序中有一个console.Writeline(text)方法,它非常有效 然而。。。当我在gui表单中使用相同的dll,并在表单中使用来自控制台

我知道如果我不发布代码,这几乎是不可能回答的,所以我会尝试给出一些例子来帮助解决这个问题,但是

我有一个写的dll,它做一些处理。我有一个异步任务,它可以报告状态消息,比如它当前正在处理的事情。有多个线程运行,每个线程处理不同的事情

现在。。。当我在控制台应用程序中使用DLL时,status.report(“我正在做什么”)工作正常。我在我的控制台应用程序中有一个console.Writeline(text)方法,它非常有效

然而。。。当我在gui表单中使用相同的dll,并在表单中使用来自控制台的相同方法以相同的数据运行相同的进程时,将行完美写入控制台的相同方法不会触发,gui甚至不会处理任何报告

例如

控制台应用程序:

Imports myDLL

Module Module1
    Sub Main
        SAE(paramaters).wait()
    End Sub

    Private Async Function SAE(parameters) as Task
        Dim progress_indicator As Progress(Of Integer) = New Progress(Of Integer)(AddressOf DisplayProgress)
        Dim progress_text As Progress(Of String) = New Progress(Of String)(AddressOf textProgress)
        Dim complete As Object = Nothing
        complete = Await Task.Run(Function() MyDLL.Process1(other parameters, progress_indicator, progress_text))
    End Function

    Private Sub DisplayProgress(ByVal percentage As Decimal)
        Console.WriteLine("percentage " + Format(percentage, "0.00"))
    End Sub

    Private Sub textProgress(ByVal text As String)
        Console.WriteLine("sub - reporting: " + text)
    End Sub
End Module 

Public Class myDLL
    Public Function SettleAll(other paramaters, progress_indicator As IProgress(Of Integer), status As IProgress(Of String)) As Boolean
        Dim aThread As Thread
        aThread = New Thread(Sub() _OtherProcess(other parameters, progress_indicator, status))
        aThread.Start()
        System.Threading.Thread.Sleep(10)
        aThread.Join
    End Function

    Private Sub _OtherProcess(other parameters, progress_indicator, status))
        Loop
            'Do Some stuff...
            status.Report("Report back this it's working on this, that or the other")
            progress_indicator.Report(SomePercentageProgressVariable))      
        End Loop
    End Function 
End Class
现在。。。当我使用它时,我会像预期的那样在控制台窗口中获得消息。然而。。。在gui中。。。当我复制SAE方法并将子主代码放入按钮时,单击如下:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SAE(paramaters).wait()
End Sub
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Await SAE(paramaters)
End Sub
。。。我改变了以下方法:

Private Sub DisplayProgress(ByVal percentage As Decimal)
    Debug.Print("percentage " + Format(percentage, "0.00"))
End Sub
Private Sub textProgress(ByVal text As String)
    TextBox1.AppendText(text)
    Debug.Print("sub - reporting: " + text)
End Sub
什么都没发生

DLL正在进行处理,但没有报告。

我想我解决了它

如果我将单击方法上的按钮更改为异步方法,如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SAE(paramaters).wait()
End Sub
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Await SAE(paramaters)
End Sub
它似乎起作用了