VB.NET多线程.从单独的类文件中的类调用UI控件上的调用
我已经尝试了解这几天了,并想知道这是不是很简单,我错过了或完全错了.
例: TestClass.vb如下所示: Imports System.Threading Public Class TestClass Private myClassThread As New Thread(AddressOf StartMyClassThread) Public Sub Start() myClassThread.Start() End Sub Private Sub StartMyClassThread() myForm.Msg("Testing Message") End Sub End Class myForm.vb是一个基本表单,其中包含一个列表框控件和一个分别名为Output和StartButton的按钮控件. Public Class myForm Private classEntity As New TestClass Private Sub StartButton_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) _ Handles StartButton.Click Msg("Start Button Pressed") classEntity.Start() End Sub Delegate Sub MsgCallBack(ByVal mesg As String) Public Sub Msg(ByVal mesg As String) If Output.InvokeRequired Then MsgBox("Invoked") Dim d As New MsgCallBack(AddressOf Msg) Invoke(d,New Object() {mesg}) Else MsgBox("Not Invoked") mesg.Trim() Output.Items.Add(mesg) End If End Sub End Class 结果: 应用程序运行,没有错误或异常. 我必须阅读一本不同页面的小书,试图彻底了解坑落和方法,但我觉得我可能陷入了许多人可能会做的陷阱. 亲切的问候, 莱克斯
这里的问题是你在myForm的实例上调用函数Msg,而不是myForm类的共享函数.
在TestClass中更改代码以添加 Public FormInstance as myForm 然后更换 myForm.Msg("Testing Message") 同 FormInstance.Msg("Testing Message") 然后在StartButton_Click中添加该行 classEntity.FormInstance = Me 你会得到预期的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |