2013-03-24 76 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