Windows 10 通用应用程序挂起崩溃并出现死锁

Posted

技术标签:

【中文标题】Windows 10 通用应用程序挂起崩溃并出现死锁【英文标题】:Windows 10 universal application suspend crashes with deadlock 【发布时间】:2016-05-31 07:57:00 【问题描述】:

我在 Windows 10 通用应用程序中遇到了挂起功能的问题。对于第一次登录,我有一些对 api 的请求的逻辑,以便为刚登录的用户加载信息。在此初始加载期间,如果按下“开始”按钮,应用程序应该会暂停,但没有达到“OnSuspending”。 我按照一些步骤来解决问题。在生成的迷你转储中,我发现了一些奇怪的东西:

EXCEPTION_CODE: (NTSTATUS) 0xc0000194 - EXCEPTION  Possible deadlock condition.

STACK_TEXT:    
ntdll!NtWaitForMultipleObjects+0x6
KERNELBASE!WaitForMultipleObjectsEx+0x112
twinapi_appcore!Event::WaitWithFreeUnusedLibraries+0x88
twinapi_appcore!Windows::ApplicationModel::Core::CoreApplicationFactory::RunInternal+0x208
twinapi_appcore!Windows::ApplicationModel::Core::CoreApplicationFactory::Run+0x12
Windows_UI_Xaml!RunInActivationMode+0x58
Windows_UI_Xaml!DirectUI::FrameworkApplicationFactory::Start+0x32
0x2d0684

BUCKET_ID:  c0000194_twinapi_appcore!Event::WaitWithFreeUnusedLibraries+88

我只能在设备上而不是在模拟器上重现它。

【问题讨论】:

【参考方案1】:

在通用 Windows 10 应用程序中,如果您想执行任何后台操作,您应该使用后台任务。 您的应用程序陷入僵局的原因是您同时开始调用 Api 和暂停应用程序。 请尝试使用下面的教程,该教程展示了如何实现后台任务(有很好的描述):

https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

您也可以使用我的 GitHub 中的现成示例:

https://github.com/Daniel-Krzyczkowski/Windows10/tree/master/BackgroundTasksDemo

【讨论】:

以上是关于Windows 10 通用应用程序挂起崩溃并出现死锁的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 macOS 上使用 QThread 时 PyQt 应用程序崩溃或挂起?

Visual Studio 2010 挂起附加到进程/调试

程序崩溃后如何挂起所有线程?

Android异常处理最佳实践?

执行任何 IO/流时 C++ JNI 崩溃/挂起

如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码:0xE0434352?