标签: waitforexit

从C#通过Process类生成时,正确处理程序的标准错误和输出的方法?

我阅读了Process.StandardOutput的文档,其中包含以下引用:

如果父进程在p.StandardOutput.ReadToEnd之前调用p.WaitForExit并且子进程写入足够的文本来填充重定向的流,则可能导致死锁条件.

所以我很想知道.如果我还害怕在某些情况下可以填充StandardError,那么正确的方法是什么?

我是否必须使用循环来交替读取标准输出和错误,以避免填充,或者这个简单的代码是否足够:

string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Run Code Online (Sandbox Code Playgroud)

在发布了一些答案后编辑

那么这是正确的方法吗?

var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Run Code Online (Sandbox Code Playgroud)

然后我只在进程实际完成时才使用stringbuilder内容.

这是正确的方法吗?

.net subprocess process waitforexit redirectstandardoutput

7
推荐指数
1
解决办法
3921
查看次数

WaitforExit无法正常工作

所以我一直在与这个问题作斗争一段时间,并尝试了许多不同的方法来解决它,但不能.

基本上我的应用程序是调用java文件来加载设备上的应用程序.当它正在加载它将它打印到richtext框时,我想转到下一个文件.我遇到的问题是,当第一个文件被加载时,第二个文件尝试加载哪些情况问题.我已经尝试了等待退出,但如果我这样做,那么输出数据就不会写入富文本框.有任何想法吗?

private void btnLoad_Click(object sender, EventArgs e)
    {
        rchsdtOut.Clear();
        //count the items in queue.
        var count = lstBarToLoad.Items.Count;

        if (count <= 0)
        {
            MessageBox.Show("Nothing added to the load queue");
       }
        else
       {

            String toLoad;
            for (int i=0; i < count;i++)
              {//START OF FOREACH
                 toLoad = lstBarToLoad.Items[i].Text;
                //call load method.
                  loaddPB(toLoad);      
              }//end of for.
        }//end of else.
    }//end of private
Run Code Online (Sandbox Code Playgroud)

我尝试在许多不同的地方等待退出,但它似乎不起作用.

     //Method to load files on device.
    private void loaddPB(string toLoad)
    {

        process1 = new System.Diagnostics.Process();
        process1.StartInfo.UseShellExecute = false;
        process1.StartInfo.RedirectStandardOutput …
Run Code Online (Sandbox Code Playgroud)

c# waitforexit

3
推荐指数
1
解决办法
1万
查看次数

当process.WaitForExit()时,Visual C#GUI停止响应; 用来

我正在使用Visual C#2005(net framework 2)创建一个GUI应用程序.我使用以下代码来启动一个过程:

Process process = new Process();
process.StartInfo = new ProcessStartInfo("app.exe");
process.StartInfo.WorkingDirectory = "";
process.StartInfo.Arguments = "some arguments";
process.Start();
process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

我希望我的应用程序等到这个过程结束,所以我使用了WaitForExit.但是,当app.exe运行时,GUI Windows会冻结.我希望它响应(例如按下取消按钮),但我不希望代码继续,因为还有另一个进程要启动.提前致谢!

c# user-interface freeze waitforexit visual-studio

2
推荐指数
1
解决办法
9037
查看次数

如何使用Process.WaitForExit

我正在调用第三方应用程序,它"有时"在VB.NET中运行(它是一个自托管的WCF).但有时第三方应用程序将永远挂起,所以我已经添加了一个90秒的计时器.问题是,我如何知道事情是否超时?

代码如下所示:

Dim MyProcess as System.Diagnostics.Process = System.Diagnostics.Process.Start(MyInfo)
MyProcess.WaitForExit(90000)
Run Code Online (Sandbox Code Playgroud)

我想做的就是这样

If MyProcess.ExceededTimeout Then
    MyFunction = False
Else
    MyFunction = True
End If
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢,

贾森

vb.net wcf process waitforexit

2
推荐指数
1
解决办法
4万
查看次数