Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Process.Start()并继续我的代码_C#_Screenshot_Process.start - Fatal编程技术网

C# Process.Start()并继续我的代码

C# Process.Start()并继续我的代码,c#,screenshot,process.start,C#,Screenshot,Process.start,我的程序是win格式(c#)。它应该打开一个外部程序,对它的主窗口进行打印,然后关闭它。 通过使用Process.Start()我可以打开程序,但随后所有的焦点都集中在它上,我的代码就暂停了。只有当我自己关闭它时,我的表单才会继续——但现在看截图已经太晚了。 那么,如何强制我的代码继续运行呢 public void Runttk(string maromnum) { Process runttk = new Process(); runttk.St

我的程序是win格式(c#)。它应该打开一个外部程序,对它的主窗口进行打印,然后关闭它。 通过使用Process.Start()我可以打开程序,但随后所有的焦点都集中在它上,我的代码就暂停了。只有当我自己关闭它时,我的表单才会继续——但现在看截图已经太晚了。 那么,如何强制我的代码继续运行呢

    public void Runttk(string maromnum)
    {
        Process runttk = new Process();
        runttk.StartInfo.UseShellExecute = true;               
        runttk.StartInfo.FileName = @"C:\\program.exe";
        runttk.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        runttk.Start();
        this.Focus();
        try
        {
            if (runttk.WaitForInputIdle()==true)
            {                                          
                PringJpg(maromnum);
                Killttk();
            }
        }
        catch (Exception e)
        {
        }

    }
多谢各位

更新: 最后我用了Thread.Sleep(3000)。克鲁德,但做的把戏。
我没有使用backgroundworker,因为最终上传的扩展程序和我的代码之间的同步不够清晰。

也许你的程序从来都不是空闲的-这意味着
runttk.WaitForInputIdle()==true
让你的应用程序等待,直到你关闭它


添加一个限制(例如
runttk.WaitForInputIdle(500)=true
)应该可以满足您的需要。

尝试您的代码,但使用另一个程序,如notepad.exe,notepad运行,然后控制权会转到您调用PringJpg的地方


因此,我认为问题在于它正在阻塞if(runttk.WaitForInputIdle()==true),请尝试为此操作添加超时。

Process.Start()将立即将控制权返回到程序。在调试器下运行它或添加一些Debug.WriteLine()以查看代码停止的位置。也许WaitForInputIdle()在外部程序退出之前不会返回?相关:因此在进程之间使用同步对象来实现此目的。@Duane你知道线程的一个好例子吗?我是新手。BackgroundWorker非常直截了当且易于使用,但您是否使用winforms?是的。谢谢,我会查的。@Sebastian,这项检查是针对正在运行的进程进行的,它是一个win forms应用程序,而不是控制台窗口。该死。。忍者删除了。我写的基本上是:控制台窗口没有(窗口)UI,因此它们永远不会进入InputIdle状态,对
runttk.WaitForInputIdle()
的调用被阻塞。@Sebastian:无论如何,如果是控制台应用程序,WaitForInputIdle()总是会立即返回。(这里有记录:)嘿,这不是控制台@Sebastian添加一个参数是有问题的,因为我不知道程序启动需要多少时间。当我进入5000,它打印它在开始的中间。嘿,正如我说的塞巴斯蒂安超时是一个问题-我不能预测需要多少时间。