我的应用程序挂起,在我让机器进入睡眠状态然后再将其唤醒后无响应。
这是我的重复代码:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
App.Current.Suspending += OnSuspending;
App.Current.Resuming += OnResuming;
}
private void OnSuspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
var syncObject = new Object();
var dispatcher = this.Dispatcher;
lock(syncObject)
{
Task.Run(() =>
{
lock (syncObject)
{
dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() =>
{
new MessageDialog("Oh no! Deadlock during suspension!").ShowAsync();
}).AsTask().Wait();
deferral.Complete();
}
}).Wait();
}
}
private async void OnResuming(object sender, object e)
{
await new MessageDialog("Hello, I resumed").ShowAsync();
}
}
还有什么 - 如果我使用VS的生命周期事件按钮强制暂停/恢复 - VS也会挂起。
答案 0 :(得分:1)
哦,我的暂停代码中有一个死锁。如果您的暂停代码中存在死锁 - Resume
事件永远不会触发,应用程序将挂起。似乎VS并没有很好地回应它。