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

时间:2015-12-16 21:38:57

标签: vb.net multithreading forms asynchronous

我写了一个独立运行的表单类,并在按键时关闭。我希望能够同时运行此表单类的多个实例,并且无法弄清楚如何执行此操作。涉及线程的大多数示例都涉及使用指向特定例程的“addressof”,但我希望异步运行整个表单类的多个实例。

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

 SSInst = New frmMain
 SSInst.MonitorNumber = 0
 SSInst.ShowDialog()
 SSInst.Dispose()

很简单,这就是我想要做的事情:

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

 SSInst.Dispose()
 SSInst2.Dispose()

如果我能够运行它,我确信它会起作用,因为frmMain的实例是自包含的,但当然我无法运行它,因为代码会在SSInst.ShowDialog之后停止,直到该表单实例关闭

如何同时运行两个实例???

提前谢谢

2 个答案:

答案 0 :(得分:1)

由于我假设表单处理了所有必需的关闭内容以及不需要的内容,以下内容适用于您:

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()

答案 1 :(得分:0)

这应该让你开始:

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