我有一個應用程序,其中我在託管類型的應用程序中託管多種類型的內容(圖像,PowerPoint演示文稿,視頻等)。用戶必須能夠在這些內容位之間來回翻頁,優選地使用售貨機上的觸摸屏的手勢,即,輕擊屏幕的一側以前進,另一側返回。Winforms/ActiveX跨線程調用
不幸的是,顯示內容的控件可能會有進一步的嵌套,所以我使用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跨線程模式