我尝试使用<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
来运行进程并并行获取输出。
示例代码如下:
Parallel.For
A.exe代码
internal class Program
{
private static void Main(string[] args)
{
var bag = new ConcurrentBag<string>();
Parallel.For(0, int.MaxValue, i =>
{
bag.Add(MyMethod());
});
}
public static string MyMethod()
{
using (var a = new Process())
{
a.StartInfo.FileName = "A.exe";
a.StartInfo.RedirectStandardError = true;
a.StartInfo.RedirectStandardInput = true;
a.StartInfo.RedirectStandardOutput = true;
a.StartInfo.CreateNoWindow = true;
a.StartInfo.UseShellExecute = false;
a.StartInfo.ErrorDialog = false;
a.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
a.Start();
string output = a.StandardOutput.ReadToEnd();
a.WaitForExit();
return output; // sometime output will be null
}
}
}
有谁知道为什么输出会为null,我怎么能避免得到null结果?
答案 0 :(得分:0)
我试图找出为什么在流中获取null。
如果我在A.exe输出之前添加Thread.Sleep()
,主进程的ReadToEnd()
将等待A.exe输出并获得结果。
只有一种情况会导致空流是A.exe退出而没有输出。
这会让ReadToEnd()
变为空,Peek()
没有帮助,因为A.exe退出,不再输出了。
我认为我的问题是我的程序在负载很重的Windows Server 2003 R2 32bit上运行,Process.Start()
在进程无法启动时没有异常。它不会导致输出流,流程退出和流关闭。