我有一个计划,发送文件的pdf打印机驾驶员和司机打印的特定目录。后打印我要附加的pdf格式电子邮件(邮)和发送。

现在,我发送文件的打印机(这造成了一个新的进程),那么呼叫一个更改.WaitForChanged(WaitForChangedResult.创建),但当时的目的是创建的,它仍然没有完成"印刷"和pdf格式打印机仍具有锁定它,投掷了一个错误,当我尝试将这一文件的电子邮件。

  • 我认为一个普通的螺纹。睡眠(2000)或什么,但是这远远低于理想。
  • 我认为把该附件码在尝试/抓块和循环上的失败,但是再说一遍,这只是个坏消息。

我真的不能认为一个优雅的解决方案。

有帮助吗?

解决方案

WaitForChanges是 在等待创建的事件 因为你拥有这一编码。作为该文件是在创建,你会得到通知:这并不意味着该文件是全面的书面和锁删除。

可悲的是,我不知道一个很好的解决方案比其他查询文件的周期性。如果有一个"所有的锁删除"事件,可以使用,但没有。

我只是检查我们的PDF转储到目录的代码,我们只使用WaitForChanges检测开始的一个新的文件。我们然后再用一个试{}捉住{}那里的捕(无法获得权利的文件)重新提交的尝试成队列,我们维护:每一次尝试"背离"的时间更长,因此第一次尝试是1秒后我们检测到的文件、第二次为2秒钟后,然后,4,8个,等等。这减少了重试在大文件,同时仍然相当敏感,以较短的文件。

其他提示

好吧,只要观察程序正在看的文件并且让你知道,每当它改变了,你可以忽略的更改通知发生的同时,该文件仍然是锁定(仍在编写的),并等待最终改变通知其将信号最后写事件,在这之后的文件应该可以(在这一点上,你终于可以禁用的手表)。

其他比我不确定你可以做些什么,因为观察有没有"文件封闭的"事件据我所知.

据我所知是没有办法检查的文件锁没有错误的处理。

不pdf打印机开始一个新的过程也许?那么你应该能够监测这一进程,当它已退出,你的文件将被解锁。

如果你使用Adobe Acrobat对于这一点,可以产生PDF Acrodist.exe (关掉我的头顶,你想要的/正开关),然后等待产生的过程中退出

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top