110,571
社区成员
发帖
与我相关
我的任务
分享
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "cmd";
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardError = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.StandardInput.AutoFlush = true;
for (i = 0; i < listView1.Items.Count; i++)
{
cmd.StandardInput.WriteLine(listView1.Items[i].SubItems[1].Text ); //I超过40的时候应用程序未响应????
}
cmd.StandardInput.WriteLine("exit");
string info = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
cmd.Close();
string s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
int i = 0,j = 60;
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "cmd";
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardError = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.StandardInput.AutoFlush = true;
StringBuilder info = new StringBuilder();
for (i = 0; i < j; i++)
{
cmd.StandardInput.WriteLine(s); //s过长j过大时 卡死
}
cmd.StandardInput.WriteLine("exit");
info.Append(cmd.StandardOutput.ReadToEnd());
cmd.StandardInput.Close();
cmd.StandardOutput.Close();
cmd.Close();
MessageBox.Show(info.ToString());
个人猜想可能是info.Append(cmd.StandardOutput.ReadToEnd());这句的原因 于是把测试代码改成了下面的这种 发现程序没有卡死了 但是info中的内容只是第一次循环的时候cmd中的内容 由于要对cmd里的内容进行处理 弹出处理报告 所有必须要获取到cmd里面的全部内容 情况大致就是这样。。。
string s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
int i = 0,j = 60;
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "cmd";
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardError = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.StandardInput.AutoFlush = true;
StringBuilder info = new StringBuilder();
for(i = 0; i < j; i++)
{
cmd.StandardInput.WriteLine(s);
cmd.StandardInput.WriteLine("exit");
info.Append(cmd.StandardOutput.ReadToEnd());
}
cmd.StandardInput.Close();
cmd.StandardOutput.Close();
cmd.Close();
MessageBox.Show(info.ToString());
string s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
int i = 0,j = 60;
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "cmd";
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardError = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.StandardInput.AutoFlush = true;
StringBuilder info = new StringBuilder();
try
{
for (i = 0; i < j; i++)
{
cmd.StandardInput.WriteLine(s);
cmd.StandardInput.WriteLine("exit");
info.Append(cmd.StandardOutput.ReadToEnd());
}
cmd.StandardInput.Close();
cmd.StandardOutput.Close();
cmd.Close();
MessageBox.Show(info.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception m)
{
MessageBox.Show(m.ToString());
}