C# Process.Start()并继续我的代码
我的程序是win格式(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
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,它打印它在开始的中间。嘿,正如我说的塞巴斯蒂安超时是一个问题-我不能预测需要多少时间。