3

我是 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)

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

4

2 回答 2

1

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

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

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

于 2013-07-30T21:50:45.097 回答
0

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

于 2013-07-18T18:20:56.067 回答