我知道如果没有我发布代码,这几乎是不可能回答的,所以我会尝试举一些例子来帮助这个但是...
我有一个写入的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正在进行处理,但没有报告。