代码之家  ›  专栏  ›  技术社区  ›  RodH257

C#需要等待COM事件触发,然后才能继续执行而不控制事件

  •  2
  • RodH257  · 技术社区  · 16 年前

    我的工具是一个打印工具,它的目的是自动打印到PDF。我正在尝试将代码移到使用PdfCreator打印PDF(Revit中的打印工作方式是设置打印机并在API中调用“print”方法,因此除了通过打印机之外,我不能以任何方式打印PDF)。

    我的逻辑是这样的:

    1. 用户选择要打印的内容
    2. 点击打印按钮(在我的WPF窗口上)
    3. 然后,我的代码设置PDF creator设置,并注册以侦听事件
    4. 我调用Print()api方法,然后打印每个项目需要一些时间
    5. 然后我想在打印完成后得到提醒,并对文档进行一些“后处理”。
    6. 后期处理包括重命名/移动PDF等

    在阅读了其他一些问题之后,我尝试了以下方法:

    • AutoResetEvent,并使用WaitOne,直到事件处理程序调用Set()。这件事被卡在了WaitOne上,再也没有继续。
    • Application.DoEvents,直到事件处理程序设置了某个类变量。。
    • 我试着创建一个新的线程来注册活动,但似乎没有帮助

    如何使事件在新线程上激发,然后提醒当前线程继续进行?或者如何让代码等待事件触发?

    让我知道如果你需要更多的信息,很乐意提供。

    1 回复  |  直到 16 年前
        1
  •  1
  •   sharptooth    16 年前

    你的问题如下。另一个库需要一个正在运行的消息循环才能触发事件。特别是当某个消息从消息循环到达时,该消息被分派到库中并导致它触发事件。

    如果在调用代码中使用一些“wait”原语,则会阻塞消息循环,因此不会触发事件。你的程序不应该阻塞-它应该像每个Windows GUI程序一样继续运行消息循环。