2013-07-18 1 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

Считаете ли вы, что это проблема API COMprogram? Эта программа все еще находится под девелопментом и электронной почтой с одним из основных разработчиков (который является инженером, а не ученым-программистом), он упомянул, что даже когда он создает несколько объектов pwrs.Application, он заканчивает все ручки, указывающие на то же самое объект. Это звонит колокольчики? – Esteban

+0

@Esteban Мне не нужно было работать с ним, чтобы точно знать, как это сделать, но вам, вероятно, нужно работать с 'GetObject', а не с CreateObject или New. –

1

Это не совсем решение, но мое текущее «грубое» обходное решение. Это работает, если ваши итерации независимы друг от друга и хотят использовать несколько экземпляров программы на одном компьютере для выполнения этих итераций (но по какой-то причине, которая мне неизвестна, любые созданные объекты «Приложение» указывают только на первый экземпляр приложения).

Что я делаю, это обманывая код с помощью «рабочих столов»: http://technet.microsoft.com/en-us/sysinternals/cc817881.aspx

Я просто открыть код VB и экземпляр приложения на каждом рабочем столе, и по какой-то причине код VB взаимодействует только с Приложение открыто на текущем рабочем столе, а не на других. Это также происходит с Matlab. По какой-то причине все объекты приложения Matlab ссылаются на первый экземпляр.