У меня есть многопоточное приложение winforms.Один поток для графического интерфейса и один поток для фоновой обработки.В фоновой обработке я связываюсь с внешним процессом через класс Process для отправки полученных данных.
Я не понимаю, в каком потоке запущен обработчик, который я зарегистрировал Process.OutputDataReceived.Согласно документации MS: «Событие OutputDataReceived указывает, что связанный процесс записал в свой перенаправленный поток StandardOutput».Но не ясно, кто вызывает событие.
См. Пример кода ниже:
myProc= new Process();
myProc.StartInfo.UseShellExecute = false;
myProc.StartInfo.RedirectStandardOutput = true;
myProc.StartInfo.RedirectStandardError = true;
myProc.StartInfo.RedirectStandardInput = true;
myProc.StartInfo.FileName = "myapp.exe";
myProc.StartInfo.Arguments = arguments;
myProc.StartInfo.CreateNoWindow = true;
myProc.OutputDataReceived += new DataReceivedEventHandler(DataReceivedFromProc);
myProc.ErrorDataReceived += new DataReceivedEventHandler(ErrorReceivedFromProc);
myProc.Start();
myOutputStream = myProc.StandardInput;
myProc.BeginOutputReadLine();
myProc.BeginErrorReadLine();
Итак, в каком случае в каком потоке работает DataReceivedFromProc?Имеет ли это значение, если вышеупомянутое выполнено в моем потоке GUI против рабочего потока?