Process.Start()并继续使用我的代码
我的程序是win窗体(c#)。它应该打开一个外部程序,做一个主窗口的打印屏幕,然后关闭它。 通过使用Process.Start()我可以打开程序,但所有的焦点都在它上面,我的代码被暂停。只有当我自己关闭它时,我的表单才会继续 - 但截图的时间太晚了。 那么如何强制我的代码继续运行?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)
{
}
}
谢谢
UPDATE: eventuanlly我用了Thread.Sleep(3000)。 Crued,但要诀窍。 我没有使用backgroundworker,因为压缩程序和extenral程序之间的同步不够清晰。
尝试你的代码,但与另一个程序,如notepad.exe,记事本运行,然后控制下降通过您调用PringJpg。
所以我认为问题是,它是阻止如果(runttk.WaitForInputIdle()==真),请尝试添加此操作超时。
嘿,正如我所说的塞巴斯蒂安超时是一个问题 - 我无法预测需要多少时间。 – 2012-08-09 10:43:41
也许你的程序从不空闲 - 意味着runttk.WaitForInputIdle()==true
让你的应用程序等到你关闭它。
添加限制(例如runttk.WaitForInputIdle(500)==true
)应满足您的需求。
@Sebastian,这个检查是针对正在运行的进程进行的,这是一个赢取表单应用程序,而不是控制台窗口。 – 2012-08-09 10:22:24
好点,如果外部应用程序是一个控制台应用程序 – 2012-08-09 10:22:28
darn ..做了一个忍者删除。我写的基本上是:控制台窗口没有(窗口)用户界面,因此他们永远不会进入InputIdle状态,并且对'runttk.WaitForInputIdle()'的调用被阻止。 – 2012-08-09 10:23:26
单独的线程 – dtsg 2012-08-09 10:14:01
Process.Start()会立即将控制权返回给您的程序。在调试器下运行它,或者添加一些Debug.WriteLine()来查看代码停止的位置。也许WaitForInputIdle()不会返回,直到外部程序退出? – 2012-08-09 10:16:13
相关:http://*.com/questions/2740038/how-do-i-wait-until-a-console-application-is-idle 因此,跨进程使用同步对象。 – 2012-08-09 10:19:06