【发布时间】:2010-07-13 03:11:40
【问题描述】:
我有一个应用程序,其中我在一个信息亭类型的应用程序中托管多种类型的内容(图像、PowerPoint 演示文稿、视频等)。用户必须能够在这些内容位之间来回翻页,最好使用信息亭上的触摸屏手势,即点击屏幕的一侧前进,另一侧返回。
不幸的是,显示内容的控件可能有进一步的嵌套,所以我使用 Win32 鼠标挂钩来捕获鼠标点击,检查它们是否在指定区域内。这很好用。不幸的是,这些点击事件是(间接)调用我用来承载 PP 演示文稿(DSOFramer)的 ActiveX 控件上的方法,它导致了这个讨厌的 COM 异常:
An outgoing call cannot be made since the application is dispatching an input-synchronous call. (Exception from HRESULT: 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))
我最好的猜测是低级鼠标钩子是从不同的线程调用的,因为如果我直接从 Winforms UI 线程进行调用,就没有问题。我尝试了标准的 Winforms Invoke/BeginInvoke,但没有成功。
【问题讨论】:
标签: winforms activex multithreading