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();
最好能给出程序 小弟新手 感激不尽
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();
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());
}
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的时候应用程序未响应????
}
string info = cmd.StandardOutput.ReadToEnd();
cmd.StandardInput.WriteLine("exit");
cmd.WaitForExit();
cmd.Close();
cmd 退出了
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardError = true;
cmd.StartInfo.CreateNoWindow = true; 把这端参数全改掉,你这里是不显示cmd窗口,不使用shell,同时输入重定向,错误重定向。这样的设置不利于调试,我个人首先会让他显示cmd,使用shell,也不截获IO,这样的好处是执行过程就显示在那里,一目了然,那里错了,一看就知道。等我调试无误了,在把参数改回成你这种“隐藏”滴
下面是测试代码
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());