当我的机器从睡眠状态唤醒时,为什么我的UWP应用程序会挂起?

时间:2017-03-20 17:56:25

标签: uwp windows-store-apps

我的应用程序挂起,在我让机器进入睡眠状态然后再将其唤醒后无响应。

这是我的重复代码:

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也会挂起。

1 个答案:

答案 0 :(得分:1)

哦,我的暂停代码中有一个死锁。如果您的暂停代码中存在死锁 - Resume事件永远不会触发,应用程序将挂起。似乎VS并没有很好地回应它。