如何在VB.net中同时运行表单类的多个实例

如何在VB.net中同时运行表单类的多个实例,vb.net,multithreading,forms,asynchronous,Vb.net,Multithreading,Forms,Asynchronous,我已经编写了一个表单类,它独立运行并在击键时自动关闭。我希望能够同时运行此表单类的多个实例,但不知道如何执行此操作。大多数涉及线程的示例都涉及使用指向特定例程的“addressof”,但我希望异步运行整个form类的多个实例 运行屏幕保护程序的表单称为“frmMain”,它在由公共变量“MonitorNumber”定义的监视器上运行。在我定义的任何一个监视器上运行下面的代码都可以正常工作,然后当有人移动鼠标时表单实例会自动关闭(这是应该的) 很简单,我想做的是: SSInst = New fr

我已经编写了一个表单类,它独立运行并在击键时自动关闭。我希望能够同时运行此表单类的多个实例,但不知道如何执行此操作。大多数涉及线程的示例都涉及使用指向特定例程的“addressof”,但我希望异步运行整个form类的多个实例

运行屏幕保护程序的表单称为“frmMain”,它在由公共变量“MonitorNumber”定义的监视器上运行。在我定义的任何一个监视器上运行下面的代码都可以正常工作,然后当有人移动鼠标时表单实例会自动关闭(这是应该的)

很简单,我想做的是:

 SSInst = New frmMain
 SSInst2 = New frmMain
 SSInst.MonitorNumber = 0
 SSInst2.MonitorNumber = 1
 SSInst.ShowDialog()
 SSInst2.ShowDialog()

 SSInst.Dispose()
 SSInst2.Dispose()
如果我能够运行它,我肯定它会像frmMain的实例一样工作,因为frmMain是自包含的,但是我当然不能运行它,因为代码会在SSInst.ShowDialog之后停止,直到表单实例关闭

如何同时运行这两个实例


提前感谢您

因为我假设表单可以处理所有需要关闭的内容,而不是其他内容,所以以下内容应该适用于您:

SSInst = New frmMain
SSInst2 = New frmMain
SSInst.MonitorNumber = 0
SSInst2.MonitorNumber = 1
SSInst.Show()
SSInst2.Show()

application.DoEvents
Do While ssInst.Visible AndAlso ssInst2.Visible
    Application.DoEvents
Loop

SSInst.Dispose()
SSInst2.Dispose()

这应该让你开始:

System.Threading.ThreadPool.QueueUserWorkItem(AddressOf sub1)
System.Threading.ThreadPool.QueueUserWorkItem(AddressOf sub2)

嗯,由于我最初的请求中提到的原因,这些答复都不起作用。第一个需要特定子例程的地址,我希望异步运行表单,而不是特定子例程。如果我运行表单实例,它将正确运行加载、激活等事件,并在完成后自行关闭……第二个示例根本没有解决问题,因为所提供的整个代码块在表单关闭之前永远不会运行。问题是,一旦第一个实例被“显示”,在第一个实例自身关闭之前,“显示”第二个实例的代码将不会运行;更不用说提供的代码块了,它在第二个实例自身关闭之前不会运行。为什么它不会运行呢?它不是在使用
ShowDialog
,而是在使用
Show
。然后,它将保持在循环中,直到其中一个不再可见。
System.Threading.ThreadPool.QueueUserWorkItem(AddressOf sub1)
System.Threading.ThreadPool.QueueUserWorkItem(AddressOf sub2)