我正在創建一個Windows 10通用應用程序,其中程序在WebView(單頁面AngularJS應用程序)中運行,Windows應用程序通過WebView與它通信。當應用程序處於前臺時,則沒有問題,但我必須從BackgroundTask調用JavaScript函數。在BackgroundTask中運行WebView
正如我所見,如果在構造函數中將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,這對我來說會容易得多,因爲我必須在網頁上運行JS ServiceCalls。現在,我必須找到一個解決方法。你有沒有關於如何在非UI線程上運行來自某個網頁的JavaScript的建議?如果有幫助,我也有網頁的完整sourceCode。 – IThomas91
您是否找到解決此問題的解決方案? – yalematta