У меня есть приложение, в котором я размещаю несколько типов контента (изображения, презентации PowerPoint, видео и т. Д.) В приложении типа киоска. Пользователь должен иметь возможность перемещаться назад и вперед между этими битами контента, предпочтительно с помощью жестов сенсорного экрана в киоске, то есть касаться одной стороны экрана, чтобы двигаться вперед, а другой - назад.
К сожалению, элементы управления, отображающие содержимое, могут иметь дополнительную вложенность, поэтому я использую ловушку мыши Win32 для захвата щелчков мыши, чтобы проверить, находятся ли они в пределах указанной области. Это прекрасно работает. К сожалению, эти события щелчка (косвенно) вызывают методы для элемента управления ActiveX, который я использую для размещения презентаций PP (DSOFramer), и это вызывает неприятное исключение 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, проблем не будет. Я попытался стандартным Winforms Invoke / BeginInvoke безуспешно.