一个winform窗体嵌入cmd命令后,窗口假死

qq_31070989 2018-05-16 05:54:06
运行后,鼠标点击正常,只要鼠标点到窗体上显示假死状态,用了backgroundWorker也一样的问题,代码网上找的。



private void btn_Start_Click_1(object sender, EventArgs e)
{
string cmd = txtCommand.Text;
cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
using (Process p = new Process())
{
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
p.StartInfo.CreateNoWindow = true; //不显示程序窗口
p.Start();//启动程序
//向cmd窗口写入命令
p.StandardInput.WriteLine(cmd);
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
StreamReader reader = p.StandardOutput;//截取输出流
string line = reader.ReadLine();//每次读取一行
txt_Text.AppendText(line + "\n");
while (!reader.EndOfStream)
{
line = reader.ReadLine();
txt_Text.AppendText(line + "\n");
}
p.WaitForExit();//等待程序执行完退出进程
p.Close();
}
}
...全文
1321 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31070989 2018-05-17
  • 打赏
  • 举报
回复
解决了 用了invoke方法
还想懒够 2018-05-17
  • 打赏
  • 举报
回复
while (!reader.EndOfStream) { line = reader.ReadLine(); txt_Text.AppendText(line + "\n"); } 改成 while (!reader.EndOfStream) { line = reader.ReadLine(); txt_Text.AppendText(line + "\n"); Application.DoEvents(); } 试试
大鱼> 2018-05-17
  • 打赏
  • 举报
回复
引用 3 楼 qq_31070989 的回复:
解决了 用了invoke方法
正怒月神 版主 2018-05-16
  • 打赏
  • 举报
回复
while (!reader.EndOfStream) { line = reader.ReadLine(); txt_Text.AppendText(line + "\n"); } 你应该通过invoke来添加 信息。而不是占用主线程

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧