ProblemwithProcessclasswhenredirectingcommandpromptoutputtowinform我在市场上寻找“标签式”“命令提示符应用程序,因为当我考虑创建我自己的桌面屏幕,我厌倦了多个命令提示符窗口弄乱了我的桌面屏幕。虽然我知道它不会像独立产品一样好,但我认为创建自己的产品只是为了更加熟悉它是一个很好的练习使用“System.Diagnostic”类(Process、ProcessStartInfo等)。我以前从未真正玩过它。我刚刚创建了一个准系统winforms应用程序,它有2个选项卡(包含richtextfields),一个文本字段(用于输入命令)和一个按钮(实际运行命令)。我发现各种帖子显示如何运行命令,但我在实际执行命令并将结果返回到richtextbox时遇到问题。这是我根据我现在所知道的创建的方法:(从以前的答案更新)publicvoidGetConsoleOuput(stringcommand){stringoutputString;ProcessStartInfostartupInfo=newProcessStartInfo()startInfo.FileName="cmd.exe";开始信息。RedirectStandardOuput=true;startInfo.WindowStyle=ProcessWindowStyle.Hidden:startInfo.UseShellExecute=false;startInfo.Arguments("/C"+命令);Processprocess=newProcess()process.StartInfo=startInfo;(AppendRichBoxText);process.Start()process.BeginOutputReadLine();过程.WaitForExit();过程。关闭();}publicvoidAppendRichBoxTet(objectsender,DataReceivedEventArgsargs){stringoutputString=args.Data;//需要使用它自己的线程更新richTextBoxrichTextBox.BeginInvoke(/*不确定要在里面放什么*/);}使用此方法将继续将输出文本附加到richtextbox。在这一点上,我坚持如何实现BeginInvoke方法,以便这个richTextBox将在它自己的线程上更新它的文本。是的你可以。您可以使用事件驱动的输出重定向API而不是使用ReadToEnd(它将阻塞直到进程完成):BeginOutputReadLine的文档中有一个示例。编辑:对于Control.BeginInvoke,这可能是最简单的解决方案:publicvoidAppendRichBoxTet(objectsender,DataReceivedEventArgsargs){MethodInvokerappend=()=>richTextBox.AppendText(outputString);富文本框。开始调用(追加);这里没有什么问题1)你不是在等待进程完成。在读取输出之前,您应该使用Wait方法等待它完成。2)输出缓冲区有一定的大小,如果它溢出你会得到一个死锁。确保添加一个事件处理程序以在可用时读取stdout或启动另一个线程以定期检查它。3)为什么要使用cmd.exe?以上就是C#学习教程:将命令提示符的输出重定向到winform时遇到Process问题时分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多付出注意——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
