Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Dispatcher从windows应用商店应用程序中的恢复事件处理程序在UI上运行代码_C#_Windows Store Apps - Fatal编程技术网

C# 如何使用Dispatcher从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.

我正在开发一个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));
                });