對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功能包含在它沒有任何,但接收args:object o和DataReceivedEventArgs e。
什麼方法最好返回e.Data從原始開關(perl_o)顯示在消息框中?我不知道如何做到這一點。我甚至不確定是否有用於從外部調用perl的最有效的方法。整個應用程序基於perl被外部調用,並返回數據。調用perl的部分已經在第二個線程上運行。任何和所有的幫助,將不勝感激,因爲我是一個初學者...要溫柔:)
編輯: e.Data未聲明。它在調用事件Perl_Output時傳遞。交換機用於基本的網絡命令,在這種情況下:「PERL_TEST」。
未聲明perl_o。我正在尋找一種方法來使perl_o = e.Data AFTER mainproc.process_file完成它的過程。
對我來說最好的總體方法是如果我可以將包含myProcess的函數聲明爲字符串(而不是void),讓函數等待進程完成運行,然後返回進程的輸出。
開關測試是什麼? – 2010-01-14 14:44:13
我認爲你已經消除了太多的代碼。我沒有看到perl_o或e.Data在您的片段中聲明或傳遞......它們來自哪裏?他們如何到達那裏?顯示你的整個方法將有所幫助。 – 2010-01-14 14:45:30