2015-12-20 76 views
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正在进行处理,但没有报告。

回答

0

想我解决了它。

如果我改变on_click方法按钮,一个异步方法llike这样的:

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Await SAE(paramaters) 
End Sub 

看来工作