首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在后台启动批处理文件并重定向其输出?

如何在后台启动批处理文件并重定向其输出?
EN

Stack Overflow用户
提问于 2012-01-19 22:57:48
回答 1查看 3.6K关注 0票数 2

我试图从应用程序调用批处理文件,但我希望隐藏命令窗口,并将标准输出重定向到一个或多个位置(因为它是由批处理文件生成的)。

我的问题是,当批处理文件正在运行时,控制台启动,没有显示任何内容;它只是启动。任务完成后,控制台将关闭。我想摆脱控制台(也许让它在后台运行)。

另一个问题是,我将输出重定向到富文本框。如果我将其重定向到控制台或文本框,它只会一次输出所有结果。我希望它在发生的时候逐行吐出。讲得通?

代码如下:

代码语言:javascript
复制
    //Declare and instantiate a new process component.
    System.Diagnostics.Process process1;
    process1 = new System.Diagnostics.Process();
    process1.StartInfo.UseShellExecute = false;
    process1.StartInfo.RedirectStandardOutput = true;
    process1.StartInfo.FileName = "cmd.exe";
    process1.StartInfo.Arguments = "<BATCHfILE>";
    process1.Start();

    string output = process1.StandardOutput.ReadToEnd();
    rchsdtOut.Text = output;

    Console.WriteLine(process1.StandardOutput.ReadToEnd());

    process1.WaitForExit();
    process1.Close();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-19 23:03:11

这就是我会怎么做的。希望我正确理解了你的问题:

添加:

代码语言:javascript
复制
process1.CreateNoWindow = true,
process1.OutputDataReceived += (s, e) => myMethod(e);
process1.BeginOutputReadLine(); 

然后是一种方法

代码语言:javascript
复制
private void myMethod(DataReceivedEventArgs e)
{
    //Do something with e.Data
}

解决评论中提到的跨线程操作问题。您需要将此代码添加到您的窗体类中(在函数开始之前):

代码语言:javascript
复制
private delegate void updateText(string str);

然后,您需要添加以下内容:

代码语言:javascript
复制
private void update_richTextBox1(string value)
{
    richTextBox1.Text += value;
}

然后在myMethod函数中添加:

代码语言:javascript
复制
richTextBox1.Invoke(new updateText(update_richTextBox1), new object[] { e.Data.ToString() });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8928183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档