vb.net - 如何有选择地与程序的两个实例进行通信?

时间:2013-07-18 14:16:17

标签: vb.net multiple-instances system.diagnostics

我是VB的新手,如果这是一个简单的问题,请原谅我。

我将在程序中运行多个耗时(单线程)进程(允许通过COM自动化)。因此,为了节省一些时间,我想打开这个程序的两个或更多实例并同时运行它们。但是我尝试在程序上做的任何事情都发生在第一个打开的程序上。这就是我的意图,我打算打开程序的两个实例(正确地执行),并在每个实例中打开一个新文档(它所做的是在myProcess0中打开两个新文档而在myProcess1中没有打开。 :我已激活System.Diagnostics名称空间。

    Using myProcess0 As Process = Process.Start(programPath)
        myProcess0.WaitForInputIdle()
        pws0 = New COMprogram.Document
    End Using

    Using myProcess1 As Process = Process.Start(programPath)
        myProcess1.WaitForInputIdle()
        pws1 = New COMprogram.Document
    End Using

注意:COM程序不允许为程序创建句柄(如Matlab允许使用MLApp.MLApp)

任何帮助将不胜感激!提前谢谢!

2 个答案:

答案 0 :(得分:1)

这不是一个解决方案,而是我目前的“粗暴”解决方法。如果您的迭代彼此独立并且希望在同一台计算机中使用程序的多个实例来执行这些迭代,那么这是有效的(但由于某些我不知道的原因,任何创建的“应用程序”对象都只指向第一个应用程序的实例)。

我正在做的是使用“桌面”欺骗代码:http://technet.microsoft.com/en-us/sysinternals/cc817881.aspx

我只是在每个桌面上打开VB代码和一个Application实例,由于某种原因,VB代码只与在当前桌面上打开的应用程序交互,而不与其他桌面交互。这也与Matlab以某种方式发生。出于某种原因,所有Matlab Application对象都引用了第一个实例。

答案 1 :(得分:0)

这将取决于COMprogram API。例如,使用Word或Excel,您无法在不操纵Application对象的情况下指定要访问的实例。