gpt4 book ai didi

c# - 在后台任务中运行 WebView

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:36 24 4
gpt4 key购买 nike

我正在创建一个 Windows 10 通用应用程序,其中程序在 WebView(单页 AngularJS 应用程序)中运行,Windows 应用程序通过 WebView 与其通信。当应用程序位于前台时,它没有问题,但我还必须从 BackgroundTask 调用 JavaScript 函数。

如我所见,如果在构造函数中将 ExecutionMode 属性设置为 SeparateThread,则 Windows 10 中有可能在单独线程而不是 UI 线程中运行 WebView。我尝试在 BackgroundTask 中使用此方法,但我仍然遇到异常,我正在尝试创建一个在不同线程上编码的对象。

这是一个代码片段:

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 绑定(bind)到它:

public RelayCommand Test
{
get
{
return new RelayCommand(() =>
{
Task.Run(() =>
{
var tmp = new WebView(WebViewExecutionMode.SeparateThread);
tmp.Navigate(_appBaseUri);
});
});
}
}

如上所示,我在非 UI 线程中创建了一个 WebView 实例,但即使 WebView 被创建为在单独的线程上运行,我仍然遇到异常。

有什么办法吗?我目前正在研究,所以我接受任何帮助或想法。

最佳答案

有个误会。您必须在 UI 线程上创建 WebView。

SeparateThread执行方式是指webview会在非UI线程上处理和显示内容,以提高特定场景下的性能。它不是让您启动一个新线程并在其上创建 webview 实例。线程是自动创建的,您将无法管理它。

如果我们有一个繁忙的 UI 并且我们有很多内容要加载,为了避免在 UI 上阻塞,我们可能会启动一个新线程来加载数据并首先显示控件。这使得 UI 响应。实际上,SeparateThread 执行模式也做了类似的事情。

因此您需要 UI 线程处于事件状态。

关于c# - 在后台任务中运行 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com