繁体   English   中英

有没有比Thread.Sleep()更好的方法来等待PrintOut()的方法?

[英]Is there a better way than Thread.Sleep() to wait for example for PrintOut()?

我做了一个小功能,应该打印一些InfoPath文件。 有必要在某些地方立即停止线程,以便一切正常。 如果我删除Thread.Sleep(); 例如,该功能可快速关闭应用程序。 现在我想知道,是否有更好的方法来解决该问题而不是停止线程?

这里有一个功能:

Application InfoPath = new Microsoft.Office.Interop.InfoPath.Application();
XDocument InfoPathXml = InfoPath.XDocuments.Open(XmlFile);
Thread.Sleep(Sleep);
InfoPathXml.PrintOut();
Thread.Sleep(Sleep);
InfoPath.Quit();
Thread.Sleep(Sleep);

第一次睡眠将等待,直到InfoPath打开文档。 第二个,等待创建打印作业。 最后一个,等待直到文件被保存。

编辑这是一些新代码...但是很遗憾,它不能很好地工作...仅在某些情况下会触发该事件。 还有其他解决方案吗?

try
{
    Application InfoPath = new Microsoft.Office.Interop.InfoPath.Application();
    XDocument InfoPathXml = InfoPath.XDocuments.Open(XmlFile);
    InfoPathXml.OnContextChange += new _XDocumentEventSink2_OnContextChangeEventHandler(XmlFileLoaded);
    do
    {
        Thread.Sleep(0);
    } while (IsFileLocked(TempPath) == true);
    InfoPath.Quit();
}
catch (Exception exp)
{
    log.Write(exp.Message);
}

static private void XmlFileLoaded(DocEvent pEvent)
{
    pEvent.XDocument.PrintOut();
}

编辑2

任何人都可以想象为什么事件不会每次都激活。 如果我启动程序,则该事件每4或5次触发一次。

发生两种不同的情况:

  1. 该程序使用InfoPath打开xml文件,什么也没有发生,它只是在等待。 (“ IsFileLocked”功能的原因。)未触发该事件。
  2. 打开第一个文件后触发事件。 之后,该事件在每个文件处发生,一切正常。

兑现文件可能是一个问题,还是类似的问题?

编辑3

好了,通过以下事件处理,我可以解决问题:

_Application3 InfoPathApplication = null;
ApplicationEvents InfoPathApplicationEvents = null;

InfoPathApplication = (Microsoft.Office.Interop.InfoPath._Application3)InfoPath;
InfoPathApplicationEvents = (Microsoft.Office.Interop.InfoPath.ApplicationEvents)InfoPathApplication.Events;
InfoPathApplicationEvents.XDocumentOpen += new _ApplicationEvents_XDocumentOpenEventHandler(XmlFileLoaded);


static private void XmlFileLoaded(_XDocument pEvent)
{
    pEvent.PrintOut();
    //pEvent.XDocument.PrintOut();
}

是的,请使用异步编程。 定义在每个事件之后要调用的回调函数。 这里

  1. 订阅事件_ApplicationEvents_QuitEventHandler退出
  2. 退出应用程序之前,请等待信号灯。
  3. 在事件处理程序中(即,InfoPath应用程序退出时),打开信号灯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM