对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