MultiThreading - 在函数完成后关闭表单

时间:2017-12-01 22:11:24

标签: vb.net

我是多线程'事情,我需要一些帮助,以下代码:

按钮代码:

        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访问   除了创建它的线程以外的线程。

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

1 个答案:

答案 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