为啥 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃?
Posted
技术标签:
【中文标题】为啥 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃?【英文标题】:why windows 10 UWP app is crashing due to The application called an interface that was marshalled for a different thread?为什么 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃? 【发布时间】:2019-03-19 21:26:06 【问题描述】:我有一个 Windows 10 UWP 应用程序和曲棍球应用程序 SDK 集成在其中。我无法找到应用程序崩溃的确切原因。我正在提供 Hockey 应用程序崩溃日志,请帮助我解决问题。
这是在第一次安装和打开应用程序后发生的。 从下一次开始,应用程序正在打开并且没有崩溃并且工作正常。
以下是曲棍球应用程序崩溃日志。
Microsoft.HockeyApp.Extensibility.Windows.UnhandledExceptionTelemetryModule.CoreApplication_UnhandledErrorDetected(Object sender, ApplicationModel.Core.UnhandledErrorDetectedEventArgs e)
应用特定信息:
The application called an interface that was marshalled for a different thread. (Excep_FromHResult 0x8001010E)
异常堆栈:
Binary Images:
0x00007ffc23610000-0x00007ffc2500d000+Win.Appunknown<039259f40c314ebda8ccf39e237ab5c01>D:\xxx\xx\xx\Win.App\obj\x64\Staging\ilc\intermediate\Native\Win.App.pdb.
提前致谢。
【问题讨论】:
在VS中开启“break on first chance exceptions”,你应该会发现你的错误。很可能您有一个在后台线程上调用的事件处理程序,并且您正在尝试更新处理程序中的某些 XAML UI(或绑定到 UI 的 ViewModel)。如果是这样,只需使用Dispatcer.RunAsync(…)
运行您的代码。
【参考方案1】:
你必须在 UI Thread 中调用你的方法。
这解决了我的问题:
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
//Run Your code Here
);
【讨论】:
曲棍球应用程序崩溃日志没有给出崩溃发生的任何方法。我必须在 UI 线程中调用哪种方法。 so,看看什么方法直接与 UI 交互(例如更改代码中的一些文本或图片) 查看危险或使用MainView
回复this question。以上是关于为啥 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃?的主要内容,如果未能解决你的问题,请参考以下文章