からのWebViewをナビゲートします。いくつかのコードは、デバイスが正常に作成されたと仮定して、以下の例から抜けています。IoTBrowserは、タスク/スレッドのWebViewがあります
問題は、受信したメッセージの内容に応じてWebviewに特定のWebページに移動するように伝えたいということです。
問題は、です。 "Window.Current"はnullなので、クラッシュします。
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");
をしたがって、電流はでNULLでないオーバーライドコードで
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);
}
}
この点。 私はrootframeを静的に保存し、タスクの後の時点でそれを使用すると、マーシャルエラーが発生します。つまり、オブジェクトは別のスレッドにマーシャリングされるように参照されています。
私のC#の知識は、です。進行中私は恐れる。 これまでのところ、Webビューを内部タスクに対応させる方法について適切な説明を見つけることができませんでした。出来ますか?そしてもしそうなら、どうですか?
PS:最初のサンプルコードは、対象商品:https://github.com/ms-iot/samples/tree/develop/IoTBrowser
最後の1つは、目的の機能に近いものです。ただし、そうであってはいけません: "" System.ServiceModel.Dispatcher.RunAsync "" - その名前空間に "RunAsync" doestが存在しないことを示すエラーが発生します。どの用途にこれを含めるべきか、あるいはこの機能はUWPでは利用できないのですか? –
@Thomas、いいえ、そのタイプは 'Windows.UI.Core.Core Dispatcher'です。完全な参照を追加するために自分のコードスニペットを更新してください。 –
それは、それが動作しました。しかし、NavView機能では "webView"は使用できないため、OnLaunched中にWebViewへの参照を保存する必要がありました(フレームrootFrame = Window.Current.Content; Frame; mainWindow = rootFrame)。しかし、今のところ予想どおりにナビゲートしているので、あなたのソリューションがすぐに受け入れられるようにマークします。 –