我正在尝试制作一个充当 Java 应用程序包装器的 C# 应用程序。
我试图实现的功能之一是将控制台输出重定向到我的程序,不幸的是,当我终止我的 Java 进程时,整个程序会冻结。
这是代码:
private void button1_Click(object sender, EventArgs e)
{
String start = @"myjavaapp.jar";
var startInfo = new ProcessStartInfo("java", start);
startInfo.RedirectStandardInput = startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
Process ServerProc = new Process();
ServerProc.StartInfo = startInfo;
ServerProc.EnableRaisingEvents = true;
ServerProc.ErrorDataReceived += new DataReceivedEventHandler(ServerProc_ErrorDataReceived);
ServerProc.Exited += new EventHandler(ServerProc_Exited);
ServerProc.Start();
ServerProc.BeginErrorReadLine();
}
private void ServerProc_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Invoke(new Action(() =>
{
if (e.Data.Contains("nastything"))
{
System.Windows.Forms.MessageBox.Show("Something nasty happened in console ");
}
f2.richTextBox1.AppendText(e.Data + "\n");
}));
}
我认为我的线程管理有问题 - 也许我还不明白。无论如何,在调试模式下 vs2012 会给我一个NullReferenceException
.