【问题标题】:Process.Start() and continue with my codeProcess.Start() 并继续我的代码
【发布时间】:2012-08-09 10:09:15
【问题描述】:

我的程序是 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)。 Crued,但做的伎俩。 我没有使用后台工作程序,因为结局上传外部程序和我的代码之间的同步不够清晰。

【问题讨论】:

  • Process.Start() 将立即将控制权返回给您的程序。在调试器下运行它或添加一些 Debug.WriteLine() 以查看代码停止的位置。也许 WaitForInputIdle() 直到外部程序退出才返回?
  • 相关:stackoverflow.com/questions/2740038/… 所以使用跨进程同步对象。
  • @Duane 你知道线程的一个很好的例子吗?我是新手。
  • BackgroundWorker 非常简单易用,你用的是winforms吗?
  • 是的。谢谢,我去查一下。

标签: c# screenshot process.start


【解决方案1】:

尝试您的代码,但使用其他程序(如 notepad.exe)时,记事本会运行,然后控制权会传递到您调用 PringJpg 的位置。

所以我认为问题是它阻塞了 if (runttk.WaitForInputIdle()==true),请尝试为此操作添加超时。

【讨论】:

  • 嘿,正如我所说的塞巴斯蒂安,超时是一个问题——我无法预测需要多长时间。
【解决方案2】:

也许您的程序永远不会空闲 - 意味着runttk.WaitForInputIdle()==true 让您的应用程序等到您关闭它。

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

【讨论】:

  • @Sebastian,此检查是针对正在运行的进程进行的,该进程是一个 win 表单应用程序,而不是控制台窗口。
  • 该死.. 忍者删除了。我写的基本上是:控制台窗口没有(窗口)UI,因此它们永远不会进入 InputIdle 状态,并且对runttk.WaitForInputIdle() 的调用被阻塞。
  • @Sebastian:无论如何,如果它是控制台应用程序,WaitForInputIdle() 将始终立即返回。 (此处记录:msdn.microsoft.com/en-us/library/windows/desktop/…
  • 嘿,这不是控制台。 @Sebastian 添加参数是有问题的,因为我不知道程序启动需要多长时间。当我输入 5000 时,它会在启动过程中打印出来。
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2014-12-14
  • 2015-03-29
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多