2013-10-30 188 views
0

我有一个Windows窗体,其中有一个导出为PDF格式的报告。如何等待任务完成

报告生成后,我希望应用程序完全终止。我添加了一个Application.Exit()子句,但是这有时会在导出过程中关闭该过程。

因此,我只想在导出完成时关闭应用程序。

我曾尝试以下:

while(true) 
    { 
    if (Process.GetCurrentProcess().WaitForInputIdle()) 
    { 
     Application.Exit(); 
    } 
    } 

也:但是

while(true) 
{ 
    if (Process.GetCurrentProcess().Responding) 
    { 
     Application.Exit(); 
    } 
} 

都没有工作 - 应用程序有时仍然关闭之前导出完成。

我在做什么错?

+1

它不是'任务',如'任务'类,而是一个任务,就像在工作中一样。 –

+0

是的,我的意思是逻辑意义上的任务。 –

+0

不要检查当前进程...启动子进程,并使主进程在退出之前等待它完成。 – BeemerGuy

回答

2

你可以开始在另一个进程中导出并等待它完成(查看相关文章:Wait till a process ends)。

如果不需要,可以检查导出完成的文件是否存在以及是否锁定(检出Wait Until File Is Completely Written)。

+0

我会用这种方法,谢谢! –

+0

此答案假定等待的应用程序在导出后实际上已退出。你没有提到它的确如此。 –

0

问题是,如果应用程序设计为对用户交互作出响应,则即使该应用程序仍在工作,两种方式都会关闭应用程序。

也许你应该监视应用程序的输出?即:如果PDF文件存在,则该过程完成。或者更确切地说:如果PDF文件存在并且没有被修改15秒或什么的话,退出应用程序。

+0

但是,我希望尽可能避免延迟,因为我需要的应用程序尽可能快 - 因此希望在导出完成后立即退出。 –

+0

是的,但无法知道应用程序何时从“外部”完成。 –

+0

因此,不可能简单地检查进程是否处于空闲状态或类似情况?正如我想象的那样,一旦出口完成,这个过程就会闲置,因为没有其他工作要处理。 –