2012-06-07 2 views
0

Я вхожу в цикл, который динамически задает функцию, которая будет выполняться onClick управления.Process.Start() задана ссылка объекта, не установленная на экземпляр объекта после

функция заключается в следующем:

public static void TryOpenFile(string filename, EventHandler callback) 
     { 

       Process proc; 
       proc = Process.Start(filename); 

      if (callback != null) 
       { 
        proc.EnableRaisingEvents = true; 
        proc.Exited += (a, b) => 
         { 
          callback(a, b); 
         }; 
       } 
} 

И потом:

for(int i = 0; i < numberOfControls; i++) 
{ 

      controlImg.SetFileToOpen(file, 
       delegate 
       { 
        //exited! 
       }); 

} 
+0

use Process.WaitForExited или аналогичный метод – Zenwalker

ответ

2

The documentation for this overload of Process.Start объясняет, что происходит (курсив мой):

Используйте эту перегрузку для запуска ресурса процесса, указав его имя файла . Перегрузка связывает ресурс с новым компонентом Process . Если процесс уже запущен, не запускается дополнительный процесс . Вместо этого существующий ресурс процесса повторно используется , и новый компонент процесса не создается. В таком случае вместо , возвращающего новый компонент Process, Start возвращает null для вызывающей процедуры .

Новый процесс не может быть запущен, если вы используете ShellExecute для запуска файла, используя его ассоциации, а не работает исполняемый файл. Например, если filename (например) «C: \ Test.xls», он может запустить Excel. Но если Excel уже запущен, он может открыть файл в существующем исполняемом экземпляре, а не запускать новый процесс. В этом случае значение proc будет равно нулю.

+0

Большое спасибо за ваш ответ. Я исправил эту проблему. Но у меня есть проблема с событиями сейчас. Проверьте мой вопрос о обновлении, пожалуйста. – Jack

+0

Отправьте свое обновление как новый вопрос –

+0

Хорошо. Я удалил обновление и задал новый вопрос. – Jack

2

Выглядит как точек имен файлов к уже запущенному процессу. В соответствии с MSDN documentation:

Возвращаемое значение

Тип: System.Diagnostics.Process

новый процесс компонент , который связан с процессом ресурса, или нуль, если нет процесс запускается (например, если существующий процесс используется повторно).

Update: Если имя файла является плохим имя файла, он будет, очевидно, выбросить исключение.

+0

Большое спасибо за ваш ответ. Я исправил эту проблему. Но у меня есть проблема с событиями сейчас. Проверьте мой вопрос о обновлении, пожалуйста. – Jack

Смежные вопросы