有一个网页视图浏览网页视图:IoTBrowser,从任务/线程
<WebView x:Name="webView" Margin="0,10" Grid.RowSpan="3" LoadCompleted="webView_LoadCompleted"/>
而且还有一个代码片断基础,开始将听取一个蓝色设备的任务。下面的例子中缺少一些代码,假定设备正常创建。
问题是,我想告诉Webview根据收到的消息的内容导航到某个网页。
问题是,。 “Window.Current”为空,所以它崩溃。
public App()
{
Task.Run(ReceiveC2dAsync);
}
private async static Task ReceiveC2dAsync()
{
while (true)
{
Microsoft.Azure.Devices.Client.Message receivedMessage = await deviceClient.ReceiveAsync();
if(receivedMessage != null)
{
// Snip
Task.Run(Navigate);
}
}
}
private async static Task Navigate()
{
try
{
if(Window.Current.Content != null)
((Frame)Window.Current.Content).Navigate(typeof(MainPage), "http://www.google.com");
}
catch(Exception e)
{
Debug.WriteLine("{0} Exception caught.", e);
}
}
在重写代码:
protected override void OnLaunched(LaunchActivatedEventArgs e)
下面的代码可以用来导航到所需的网站应用程序启动时:
Frame rootFrame = Window.Current.Content as Frame;
if(rootFrame == null) rootFrame = new Frame();
rootFrame.Navigate(typeof(MainPage), "ms-appx-web:///help.html");
因此,当前不为空,在这点。 如果我将rootframe保存为一个静态的,并在任务的稍后时间使用它,我会得到一个编组错误 - 基本上说明该对象被引用被编组到另一个线程。
我的C#知识是。我担心正在进行中。 到目前为止,我一直无法找到关于如何让webview响应内部任务的正确解释。可能吗?如果是这样,怎么样?
PS:最初的示例代码为:https://github.com/ms-iot/samples/tree/develop/IoTBrowser
是的,最后一个接近期望的功能。但是,不应该是:“”正在等待System.ServiceModel.Dispatcher.RunAsync“” - 这会导致在该名称空间中不存在指示“RunAsync”的错误。应包含哪些用途,或者UWP中不可用此功能? –
@Thomas,不,它的类型是'Windows.UI.Core.Core Dispatcher'。我更新了我的代码片段以添加完整的参考,请检查。 –
明白了,那有效。但是,我必须在OnLaunched期间保存对webview的引用(Frame frameFrame = Window.Current.Content as Frame; mainWindow = rootFrame),因为Navigate功能中不可用“webView”。但它现在正在按照预期进行导航,所以将您的解决方案立即标记为已接受 - 因为您的解决方案已达标。 –