我是多线程'事情,我需要一些帮助,以下代码:
按钮代码:
Dim t As New Thread(AddressOf MThere)
t.SetApartmentState(ApartmentState.STA)
t.Start()
则...
Sub MThere()
Try
MyFunctionHere()
Me.Close()
Catch ex As Exception
End Try
End Sub
运行代码时,会返回以下内容:
跨线程操作无效:控制'表格'从a访问 除了创建它的线程以外的线程。
如何在任务完成后关闭表单?我使用的功能是发送电子邮件,以便表单保持响应。
答案 0 :(得分:4)
某些对象(包括Windows窗体控件)属于创建它们的线程。如果您尝试从另一个线程访问或控制它们,则可能会遇到有关跨线程操作的异常。
幸运的是,Windows窗体有一个Invoke
方法,可以确保在UI线程上调用传递它的委托,这样错误就会消失。
所以你可以做这样的事情来修复跨线程使用问题......
Sub MThere()
Try
MyFunctionHere()
Invoke(Sub() Close())
Catch ex As Exception
' this empty catch block is a _really_ bad idea, by the way.
End Try
End Sub