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

时间:2015-12-20 15:32:44

标签: vb.net asynchronous

我知道如果没有我发布代码,这几乎是不可能回答的,所以我会尝试举一些例子来帮助这个但是...

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

现在......当我在控制台应用程序中使用我的DLL时,status.report(“我正在做什么”)工作正常。我的控制台应用程序中有一个方法,带有Console.Writeline(文本),效果很好。

然而......当我以gui形式使用SAME dll,并使用表单中控制台的SAME方法来运行带有SAME数据的SAME进程时,SAME方法可以完美地将行写入到没有触发控制台,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方法并将Sub Main代码放入按钮时,单击如下:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SAE(paramaters).wait()
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正在进行处理,但没有报告。

0 个答案:

没有答案