2015-12-20 78 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 

看來工作