Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 在Backgroundtask中运行WebView_C#_Angularjs_Windows 10 - Fatal编程技术网

C# 在Backgroundtask中运行WebView

C# 在Backgroundtask中运行WebView,c#,angularjs,windows-10,C#,Angularjs,Windows 10,我正在创建一个Windows 10通用应用程序,其中程序在网络视图(单页AngularJS应用程序)中运行,Windows应用程序通过网络视图与之通信。当应用程序位于前台时,它就没有问题了,但我也必须从后台任务调用JavaScript函数 如我所见,如果在构造函数中将ExecutionMode属性设置为SeparateThread,则在Windows 10中有可能在单独的线程而不是UI线程中运行WebView。我尝试在BackgroundTask中使用此方法,但我仍然得到一个例外,即我尝试创建一

我正在创建一个Windows 10通用应用程序,其中程序在网络视图(单页AngularJS应用程序)中运行,Windows应用程序通过网络视图与之通信。当应用程序位于前台时,它就没有问题了,但我也必须从后台任务调用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绑定到它:

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线程处于活动状态。

非常感谢您的回答。昨天我做了一些进一步的研究,得出了同样的结论。这非常不幸,因为如果我能够在非UI线程中创建webView,对我来说会容易得多,因为我必须在网页上运行JS ServiceCalls。现在,我必须找到一个解决办法。关于如何在非UI线程上运行来自某个网页的JavaScript,您有什么建议吗?如果有帮助的话,我也有完整的网页源代码。你找到解决这个问题的方法了吗?