【发布时间】:2023-03-05 14:31:01
【问题描述】:
我正在创建一个 Windows 10 通用应用程序,其中程序在 WebView(单页 AngularJS 应用程序)中运行,并且 Windows 应用程序通过 WebView 与其通信。当应用程序在前台时,它没有问题,但我也必须从 BackgroundTask 调用 JavaScript 函数。
我可以看到,如果在构造函数中将 ExecutionMode 属性设置为SeparateThread,Windows 10 中就有可能在单独的线程而不是 UI 线程中运行 WebView。我尝试在 BackgroundTask 中使用此方法,但仍然遇到异常,我正在尝试创建一个在不同线程上编组的对象。
这是一个代码sn-p:
public void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
var tmp = WebView.DefaultExecutionMode;
var webView = new WebView(WebViewExecutionMode.SeparateThread);
var notificationService = new NotificationService(new BrowserBase { Browser = webView, IsOnUIThread = false });
notificationService.Notification("ExampleCall");
deferral.Complete();
}
我检查了一些其他的东西。我刚刚在布局上放了一个按钮并将这个 RelayCommand 绑定到它:
public RelayCommand Test
{
get
{
return new RelayCommand(() =>
{
Task.Run(() =>
{
var tmp = new WebView(WebViewExecutionMode.SeparateThread);
tmp.Navigate(_appBaseUri);
});
});
}
}
正如所见,我在非 UI 线程中创建了一个 WebView 实例,但即使创建 WebView 以在单独的线程上运行,我仍然遇到异常。
有没有办法做到这一点?我目前正在研究,因此我接受任何帮助或想法。
【问题讨论】:
标签: c# angularjs windows-10