所以我创建了一个文件流,它应该流式传输start_base.cmd(启动服务器的文件)的输出。出了什么问题,是我窗体的窗口冻结,直到我杀死进程(java.exe - Ran by start_base.cmd)
这是我的代码:
ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo("CMD");
processInfo.WindowStyle = ProcessWindowStyle.Normal;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardInput = true;
processInfo.RedirectStandardError = true;
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
Process p = new Process();
p.StartInfo = processInfo;
p.Start();
TextWriter tw = p.StandardInput;
tw.Flush();
tw.WriteLine("start_base.cmd");
tw.Close();
TextReader tr = p.StandardOutput;
string output = tr.ReadLine();
while (output != null)
{
this.lg_log.Items.Add(output); // add the output string to a list box
output = tr.ReadLine();
}
这里有什么问题? :)请帮帮我..
答案 0 :(得分:3)
在你的UI线程上启动另一个线程来处理while循环:
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
public void DoWork()
{
// work to be done on another thread
}
答案 1 :(得分:2)
问题是你的while
循环。您需要在单独的线程(即不是您的UI线程)上执行此操作。
如果您通过单击按钮(或其他一些UI控件)调用上述代码,则应该使用BackgroundWorker线程或线程池中的线程(甚至只是普通的线程)来完成此任务。