0
不工作,我知道这将是几乎不可能没有我张贴的代码来回答,所以我会尽力举一些例子,以帮助这一点,但...vb.net 2010异步报告GUI
我有一个书面的DLL,它做了一些处理。我有异步任务报告状态消息,比如它正在处理的事情。有多个线程运行每个处理不同的事情。
现在......当我在控制台应用程序中使用我的DLL时,status.report(“我在做什么”)工作正常。我在我的控制台应用程序中有一个Console.Writeline(文本)的方法,它很棒。
但是...当我以gui形式使用SAME dll,并使用表单中控制台的SAME方法运行带有SAME数据的SAME进程时,SAME方法完美地将行写入控制台没有被触发,NO报告甚至被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 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正在进行处理,但没有报告。