FileOpenPicker触发事件引发RPC_E_CANTCALLOUT_ININPUTSYNCCALL错误求解
问题场景与报错说明
调用FileOpenPicker::PickSingleFileAsync时会触发Window.Activated事件,若在该事件的处理程序中调用LowLagMediaRecording::StartAsync或LowLagMediaRecording::FinishAsync,会触发如下错误:
0x8001010D : 'An outgoing call cannot be made since the application is dispatching an input-synchronous call.'
该错误对应COM错误码RPC_E_CANTCALLOUT_ININPUTSYNCCALL。
已有解决方案
目前可行的解决思路是避免在PickSingleFileAsync执行期间的事件处理逻辑中调用LowLagMediaRecording的异步方法,调整调用顺序如下:
LowLagMediaRecording::FinishAsync(); auto async = FileOpenPicker::PickSingleFileAsync(); // 不在PickSingleFileAsync执行期间的事件处理程序中调用LowLagMediaRecording方法 auto file = co_await async; LowLagMediaRecording::StartAsync()
问题本质与待探索方案
目前尚未完全理解该问题的底层本质,推测与COM线程模型、输入同步调用期间的调用限制有关,可能存在其他更优的解决方案有待探索。
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

