2013-03-24 77 views
0

有誰知道如何從在線程中運行的實例化類調用主Form表單上的函數?從線程實例化對象中調用委託

Public Class Test 
    Public Sub Temp() 
     Try 
      'Operations here 
     Catch ex as Exception 
      Form1.Invoke(New Form1.LogMessageDelegate(AddressOf frmIP.LogMessage), "Error Message To Be Outputted to TextBox on Main Form") 
     End Try 
    End Sub 
End Class 

我會讓它在函數中返回一個字符串,但是如果有異常,我只調用文本框消息。 謝謝你的時間!

+0

你的測試類應該引發一個form1訂閱的事件。然後從那裏創建委託。 – OneFineDay 2013-03-24 00:27:31

+0

這不會起作用,「Form1」不會生成適當的對象引用。你需要一個真實的對象引用,如果你必須使用Application.OpenForms(0)。 – 2013-03-24 01:50:00

回答

0
Public Class Test 
Public Event ErrorMessage(errStr As String) 
Public Sub Temp() 
    Try 
     'Operations here 
    Catch ex as Exception 
     RaisEvent ErrorMessage(ex.Message) 
    End Try 
End Sub 
End Class 

Public Class Form1 
    Private Sub form1_load() Handles Me.Load 
    Dim trd As New Thread(AddressOf RunTestClass) 
    trd.Start() 
    Ens Sub 

    Private Sub RunTestClass() 
    Dim _test As New Test 
    Addhandler _test.ErrorMessage, AddressOf Test_ErrorMessage 
    _test.Temp() 
    End Sub 

    Private Sub Test_ErrorMessage(errStr As String) 
    Me.Invoke(Sub() 
       'run code here for UI thread 
       End Sub) 
    End Sub 
End Class 
+0

我希望我能更好地理解爲什麼這樣的作品,但我只能說,它工作!非常感謝! – wayofthefuture 2013-03-24 02:37:07

相關問題