2013-07-18 73 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應用程序對象都引用第一個實例。

相關問題