2013-07-18 64 views
3

我是VB新手,如果这是一个简单的问题,请原谅我。vb.net - 我如何有选择地与程序的两个实例进行通信?

我将在程序中运行多个耗时(单线程)进程(允许通过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)

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

+0

该文档没有指向相同的文件 - 对吗? – OneFineDay

+0

DonA:不,这就像当你去Word并点击“新文档”。我猜这在技术上指向一个“空白”文件,但我的意思是,COMprogram.Document是一种在程序中创建新文件的方法。 – Esteban

回答

0

这将达到COMprogram API。以Word或Excel为例,您无法指定您正在访问的实例,而无需操纵Application对象。

+0

你认为这是COM程序API的问题吗?这个程序还在开发之中,并且和其中一位主要开发人员(这是一位不是计算机科学家的工程师)通过电子邮件发送邮件,他提到,即使他创建了多个pwrs.Application对象,他也会以所有的手柄指向相同的方式目的。这是否响铃? – Esteban

+0

@Esteban我不需要使用它来确切知道如何,但是你可能需要使用'GetObject'而不是'CreateObject'或'New'。 –

1

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

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

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

相关问题