多线程 - 函数完成后关闭表单

tox*_*net 1 vb.net

我是“多线程”方面的新手,我需要以下代码的一些帮助:

按钮代码:

        Dim t As New Thread(AddressOf MThere)
        t.SetApartmentState(ApartmentState.STA)
        t.Start()
Run Code Online (Sandbox Code Playgroud)

然后...

      Sub MThere()

         Try

        MyFunctionHere()
        Me.Close()

    Catch ex As Exception
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,返回以下内容:

跨线程操作无效:从创建它的线程以外的线程访问控制“表单”。

任务完成后如何关闭表单?我正在使用的功能是发送电子邮件,以便表单保持响应。

cHa*_*Hao 5

某些对象(包括 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
Run Code Online (Sandbox Code Playgroud)