2010-09-28 38 views
3

我有一个应用程序生成一个.pdf文件,并使用myProcess.start(pdfFileName)打开它; 。这个被称为在Winfom应用程序中的按钮上的点击事件的事件处理程序中调用。如何让C#应用程序在完成后启动新流程?

一切工作正常,除非如果我退出(alt-f4或使用右上角的十字架)我的应用程序在Acrobat Reader启动后,我的应用程序不会停止:表单disapears,但VS中的调试会话不要停下来,即使我已经退出Acrobat Reader。 beahaviour是相同的,如果我编译realese和/或从Windows启动exe而不是从VS启动,那么我必须使用任务管理器终止进程。

我在文档中找不到任何东西,但我知道这肯定是一个非常普遍的问题?

谢谢, Jaune。

回答

2

您需要挂钩ProcessExit event

myProcess.StartInfo.FileName = fileName; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new EventHandler(myProcess_Exited); 
myProcess.Start(); 

[...] 

private void myProcess_Exited(object sender, System.EventArgs e) { 
    Application.Exit(); 
} 
+0

好的,谢谢你。所以没有办法只是启动一个没有绑定到我的进程的进程。由于用户可能会启动未知数量的pdf,我必须计算进程并使用事件处理程序来了解它们何时全部终止,然后才能退出()? – Jaunedeau 2010-09-28 10:02:58

0

我刚刚使用Acrobat Reader对其进行了测试,并且应用程序正常退出。你必须留下后台进程或循环运行的线程。

+0

您似乎是对的:我创建了一个新的WinForm应用程序,只是添加到它的按钮上,并将此方法设置为点击处理程序: private void button1_Click(object sender,EventArgs e) Process process = new Process(); Process.Start(@“c:\ a.pdf”); Process.Start(@“c:\ a.pdf”); } 而且这个工作正常。所以也许问题来自XSL:FO转换器(nFop,java端口)。如果我找到答案,我会尽力挖掘并更新。谢谢。 – Jaunedeau 2010-09-28 10:17:13

+0

好的,祝你好运! – Ruel 2010-09-28 10:20:47

0
theProcess.EnableRaisingEvents = true; 
theProcess.Exited += delegate(object sender, System.EventArgs e) 
            { Application.Exit(); } 
theProcess.Start(); 
相关问题