c#进程+后台工作者&计时器的错误
本文关键字:计时器 错误 工作者 进程 后台 | 更新日期: 2023-09-27 18:01:52
我有一些生成进程的代码,正在执行的文件是一个Java应用程序,我的目的是读取它的输出。
问题是,当我调用Start
时,我无法读取该点之后的输出流。如果我在调用Start
之后测试并调用Console.Beep
,那么哔哔声就会出现-所以它显然是在执行这些行。
Control.CheckForIllegalCrossThreadCalls = false;
Process java = new Process();
java.StartInfo.FileName = "java";
java.StartInfo.Arguments = "-Xms1024M -Xmx1024M -jar craftbukkit-0.0.1-SNAPSHOT.jar nogui";
java.StartInfo.RedirectStandardOutput = true;
java.StartInfo.UseShellExecute = false;
java.Start();
System.Console.Beep();
System.Console.Write("hejsan");
StreamReader Reader = java.StandardOutput;
txtLog.Text = Convert.ToString(System.Console.Read());
broadcast(Convert.ToString(System.Console.Read()), "[Server]", false);
为什么我不能从输出流中读取?
看看这个微软标准输出参考。
基本上,您需要调用WaitForExit
并尝试读取之后的流。这是一个阻塞调用,所以除非你对它和异步做一些奇怪的事情,否则这是相当直接的:
if (java.Start())
{
java.WaitForExit();
var reader = java.StandardOutput;
output = reader.ReadToEnd();
}
这里值得一提的是,Start
方法返回一个布尔值,指示进程是否实际启动-这有助于我们决定要做什么,以及我们是否可以这样做。
在另一个注意事项上,我不禁注意到你实际上并没有尝试从输出流中读取,你只是声明了一个变量并引用了它;为了利用它,您需要调用该类公开的方法,例如ReadToEnd
—我在上面的示例中添加了用法。