私のアプリは共有の対象アプリで、アプリが実行されているときにコンテンツを共有したいときに問題に直面しています。実行中のアプリケーションからフレームを使用することはできません。なぜなら、「マーシャリングスレッド」例外が発生するからです。Windows 10でユニバーサルアプリケーションTemplate10のアプローチを共有する
アプリケーションは、異なるスレッドに対してマーシャリングされたインターフェイスと呼ばれます。\ r \ nを\ rを\ nFailedががどのように見えるApp.xaml.csで視覚的アプリケーションのルート
マイOnStartAsync
方法を初期化しますこの。
public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
{
switch (DetermineStartCause(args))
{
// other cases
case AdditionalKinds.Other:
if (args is ShareTargetActivatedEventArgs)
{
var shareArgs = args as ShareTargetActivatedEventArgs;
if (shareArgs.PreviousExecutionState != ApplicationExecutionState.Running)
{
Uri webUrl = await shareArgs.ShareOperation.Data.GetWebLinkAsync();
Debug.WriteLine(webUrl.AbsoluteUri);
//shareArgs.ShareOperation.ReportStarted();
NavigationService.Navigate(typeof(Views.MainPage), webUrl.AbsoluteUri);
}
else
{
await CoreApplication.Views.First().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
Uri webUrl = await shareArgs.ShareOperation.Data.GetWebLinkAsync();
var nav = NavigationServiceFactory(BackButton.Attach, ExistingContent.Exclude);
Window.Current.Content = new Views.ShareLaunch();
Window.Current.Activate();
});
}
}
break;
}
}
私は、アプリケーションがすでに実行されている場合、すなわち、ShareTargetActivatedEventArgs
のための他の条件をどのように処理するかを確認していません。 similar question on Stackoverlowが見つかりましたが、Template10ライブラリは使用していません。 Template10ライブラリを使用してこのシナリオを処理する方法。
お返事ありがとうございます。今、 'else'ブロックで' Dispatcher'を使って 'Window.Current.Content'をいくつかのビューに設定しています。それは正しい方法ですか? –
@VivekMaskaraコードは機能していますか?あなたの最初の 'if(shareArgs.PreviousExecutionState!= ApplicationExecutionState.Running) 'についてはわかりません - これがどのように振る舞うかは分かりませんが、以前は中断/終了していました。また、アプリの複数のビューがあるかどうかを確認してから、適切な操作を実行することもできます。あなたのコードはディスパッチャで実行されますが、達成したいことがわかっているかどうかはわかりませんが、以前のディスパッチャから新しいウィンドウの内容(新しいアプリケーションビュー)を設定しようとしていることがわかりますそれはあなたがしたいことです。 – Romasz
@VivekMaskara新しいアプリケーションビューでは、 'Window.Current'は新しいウィンドウを参照し、古いウィンドウは参照しません。 – Romasz