Довольно плохо знаком с C # (и я бы назвал себя новичком в программировании, но я честолюбив), так что, возможно, это очень простое решение.
У меня есть функция, вызываемая в переключателе, как это:
case "PERL_TEST":
FileInfo fi = new FileInfo("hello.txt");
mainproc.process_file(fi);
MessageBox.Show(perl_o);
break;
mainproc.process - это функция, которая вызывает Perl следующим образом:
myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl.exe");
myProcessStartInfo.Arguments = "perly.pl";
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcessStartInfo.CreateNoWindow = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.OutputDataReceived += new DataReceivedEventHandler(Perl_Output);
myProcess.Start();
myProcess.BeginOutputReadLine();
Функция Perl_Output ничего не содержит в себе, но получает аргументы: объект o и DataReceivedEventArgs e.
Каким методом было бы лучше вернуть e.Data для отображения в окне сообщения от исходного переключателя (perl_o)? Я не уверен, как это сделать. Я даже не уверен, что у меня есть самый эффективный метод для внешнего вызова Perl. Все приложение основано на том, что perl вызывается извне и возвращает данные. Часть, которая вызывает Perl, уже запущена во втором потоке. Любая и вся помощь будет оценена, так как я новичок ... будьте нежны:)
Edit:
е. Данные не объявлены. Он передается, когда вызывается событие Perl_Output. Переключатель для основных сетевых команд, в данном случае: «PERL_TEST».
perl_o не объявлен. Я ищу способ, чтобы perl_o = e.Data ПОСЛЕ mainproc.process_file завершил свой процесс.
Лучший общий способ для меня был бы, если бы я мог объявить функцию, содержащую myProcess, как строку (вместо void), заставить функцию ждать завершения процесса, а затем вернуть выходные данные процесса.