在 UWP 后台任务中实例化 UI 个线程
Instantiate UI thread in a UWP background task
我需要调用一个需要从 UI 线程进行调用的方法。我的代码作为后台任务执行(我在 UWP 中使用 Windows 运行时组件并且每 15 分钟 运行 后台任务)。
我想从后台任务的 Run()
方法中调用此方法。
问题是,如果应用程序没有打开,Window.Current
是null
,所以我不能使用Dispatcher
。我尝试了 Correct way to get the CoreDispatcher in a Windows Store app, Run code on UI thread in WinRT and Be two places at once using multiple windows 的变体(实例化一个新视图),但它们都因 This method must be called on an UI thread.
或 The main windows has not been created.
而失败
我也尝试了以下方法。
Thread t = new Thread(() => apiCall());
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
以及以下,使用 Dispatcher
。
CoreApplicationView newView = CoreApplication.CreateNewView();
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => apiCall());
两种方法均因上述错误而失败。
后台任务无法启动 UI。您可以显示 toast 通知,让用户通过 toast 通知打开应用程序。
我需要调用一个需要从 UI 线程进行调用的方法。我的代码作为后台任务执行(我在 UWP 中使用 Windows 运行时组件并且每 15 分钟 运行 后台任务)。
我想从后台任务的 Run()
方法中调用此方法。
问题是,如果应用程序没有打开,Window.Current
是null
,所以我不能使用Dispatcher
。我尝试了 Correct way to get the CoreDispatcher in a Windows Store app, Run code on UI thread in WinRT and Be two places at once using multiple windows 的变体(实例化一个新视图),但它们都因 This method must be called on an UI thread.
或 The main windows has not been created.
我也尝试了以下方法。
Thread t = new Thread(() => apiCall());
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
以及以下,使用 Dispatcher
。
CoreApplicationView newView = CoreApplication.CreateNewView();
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => apiCall());
两种方法均因上述错误而失败。
后台任务无法启动 UI。您可以显示 toast 通知,让用户通过 toast 通知打开应用程序。