在Windows 10中共享目标Universal Apps Template10方法

时间:2016-04-08 17:38:26

标签: c# win-universal-app windows-10 template10

我的应用是用于分享的目标应用,并且在应用运行且用户想要共享内容时遇到问题。我无法使用正在运行的应用程序中的帧,因为我得到一个“编组线程”异常。

应用程序调用了为不同线程编组的接口。\ r \ n \ r \ n无法初始化应用程序的根目录

App.xaml.cs 中的Map方法如下所示。

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; } } 的else条件,即应用程序已在运行的情况。我找到了similar question on Stackoverlow,但它没有使用Template10库。如何使用Template10库处理此场景。

1 个答案:

答案 0 :(得分:0)

当您在UWP上使用共享目标并且您当前的应用程序正在“正在运行”(实际上是已暂停并且已恢复 - 此事件首先被触发),正在创建新的ApplicationView。这是一个很酷的事情,但必须正确处理 - 你得到一个新的调度程序的新窗口,如果你尝试从前一个运行的东西,你将得到'错误的线程'异常(特别注意 INotifyPropertyChanged )。您的应用程序现在至少运行了两个线程,您将获得多线程应用程序的所有后果。

最好的是你可以在新窗口中放入任何你想要的东西 - 新的页面,框架或其他。一切都取决于你的设计。但是,如果您想运行/修改正在运行的应用程序,那么您将必须使用自己的 Dispatcher 。例如,您可以通过列出视图并获取一个来获取它:

await CoreApplication.Views.First().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { /*do some code*/ });

您还可以在变量中记住原始窗口的调度程序,然后在共享后使用它。如果您的代码是 async ,则在离开共享目标部分之前,您必须注意并确保它已完成。

另请注意,您可以使用ApplicationViewSwitcher来显示原始窗口(但这不会改变共享代码在不同线程上运行的事实)。

如果您需要有关多视图编程的更多信息,请查看at MSDN