2

我已经被这个问题困扰了很长时间。我有一个 VB.Net 项目,其中有几种形式。但是,如果其中一种形式冻结或崩溃,整个应用程序就会崩溃。我一直无法找到一种方法,当每个表单显示时,它要么在单独的进程中,要么在新线程中,并且能够保留与其他表单通信的能力,就好像它在主窗体上一样用户界面线程。我迫切需要找到一种方法来做到这一点,但是每次我用新表单创建一个新线程时,表单都会立即关闭。这甚至可能吗?

4

1 回答 1

4

有两件事你应该知道。

虽然完全有可能在两个单独的线程上运行两个单独的表单,但这是一个糟糕的设计(除非您真的知道自己在做什么)。如果您想在单独的线程上创建表单,那么您还负责在该线程上创建消息循环(否则您的表单将冻结)。

具体来说,你这样做Application.Run

    _thread = New Thread(Sub()
                             Using frm As New SomeForm
                                 Application.Run(frm)
                             End Using
                         End Sub)
    _thread.Start()

不同线程上的表单之间的通信与普通线程和表单之间的通信没有什么不同。您可以使用ConcurrentQueue其中一个线程写入指令供另一个线程读取的消息或简单的共享变量。您必须确保每个线程只更改它创建的表单的组件或控件。要在线程之间操作控件,您必须使用Invoke.

于 2013-07-05T06:31:12.130 回答