C# 如何使用Dispatcher从windows应用商店应用程序中的恢复事件处理程序在UI上运行代码
我正在开发一个Windows应用商店应用程序库,我想在应用程序从挂起状态恢复时在UI线程上执行代码 下面是我的代码示例:C# 如何使用Dispatcher从windows应用商店应用程序中的恢复事件处理程序在UI上运行代码,c#,windows-store-apps,C#,Windows Store Apps,我正在开发一个Windows应用商店应用程序库,我想在应用程序从挂起状态恢复时在UI线程上执行代码 下面是我的代码示例: /* Set the on resuming handler. */ Application.Current.Resuming += (s, e) => { Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.
/* Set the on resuming handler. */
Application.Current.Resuming += (s, e) =>
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
/* Do something on UI thread. */
});
};
问题是RunAsync在有时间在UI线程上执行任何代码之前就挂起了。事实上,应用程序挂起对CoreApplication.MainView的任何调用
那么,当应用程序从挂起状态恢复时,如何在UI线程上执行代码呢?我认为调度程序在该点上很可能为空。您应该做的是等待执行以UI为中心的处理,直到您导航到的页面加载为止。这可能意味着您应该先导航到加载页面,然后再转到要恢复的页面。谢谢您的建议。但这里有一个简单的解决方案:
/* Set the new handler. */
Application.Current.Resuming += (s, e) =>
{
/* Start a task to wait for UI. */
Task.Factory.StartNew(() =>
{
Windows.Foundation.IAsyncAction ThreadPoolWorkItem = Windows.System.Threading.ThreadPool.RunAsync(
(source) =>
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
/* Do something on UI thread. */
});
});
});
};
这可能不是一个完美的解决方案,但它可以工作。请注意,应用程序可以有多个视图,因此在某些情况下,这可能无法达到您预期的效果(取决于您正在运行的代码)。
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
(Windows.UI.Xaml.Window.Current.Content as Windows.UI.Xaml.Controls.Frame).Navigate(typeof(SamplePage));
});