我有一个基本的UWP应用程序。该应用程序允许用户一次打开多个文档,每个文档都在一个单独的窗口中(即"查看")。
当应用暂停时,我请求ExtendedExecutionSession
保存所有文档的更改。
但是,当我尝试在辅助窗口的相应UI线程上运行辅助窗口的保存操作时,代码永远不会运行。
我怀疑这是因为辅助窗口的UI线程已被冻结"应用程序一进入suspending
状态。代码在应用程序恢复后立即运行。
我的问题:
相关代码,App.xaml.cs:
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var l = logger.Entered("Suspending app");
suspendDeferral = e.SuspendingOperation.GetDeferral();
using (var session = new ExtendedExecutionSession())
{
session.Reason = ExtendedExecutionReason.SavingData;
session.Description = "Saving Documents";
session.Revoked += ExtendedExecutionSessionRevoked;
var result = await session.RequestExtensionAsync();
foreach (var controller in WindowController.WindowController.sharedInstance.getWindowLifetimeControls())
{
var l2 = logger.Entered("Window controller: " + controller);
await controller.dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
// XXX never called for secondary window:
l2.Checkpoint("running async...");
});
l2.Exited();
// […]
注意:上面的dispatcher
是Window.CoreWindow.Dispatcher
。我保留所有打开窗口的引用。
修改
我尝试重新编写代码以便在挂起时保存同步,但即使这样的代码也会无限期挂起:
tempZipFile.DeleteAsync().AsTask().GetAwaiter().GetResult();