[英]Sharing target Universal Apps Template10 approach in Windows 10
我的應用程序是一個目標應用程序,用於共享,並在應用程序運行且用戶想要共享內容時遇到問題。 我無法使用正在運行的應用程序中的幀,因為我得到一個“編組線程”異常。
該應用程序調用了一個為不同線程編組的接口。\\ r \\ n \\ r \\ n無法初始化應用程序的根視覺
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
的else條件,即應用程序已在運行的情況。 我在Stackoverlow上發現了類似的問題,但它沒有使用Template10庫。 如何使用Template10庫處理此場景。
當您在UWP上使用共享目標並且當前應用程序正在“運行”(實際上已被暫停並且正在恢復 - 此事件首先被觸發)時,正在創建新的ApplicationView 。 這是一個很酷的事情,但必須正確處理 - 你得到一個新的調度程序的新窗口,如果你嘗試從前一個運行的東西,你將得到'錯誤的線程'異常(特別注意INotifyPropertyChanged )。 您的應用程序現在至少運行兩個線程,您將獲得多線程應用程序的所有后果。
最好的是你可以在新窗口中放置任何你想要的東西 - 新的頁面,框架或其他。 一切都取決於你的設計。 但是如果你想運行某些東西/修改正在運行的應用程序,那么你將不得不使用它自己的Dispatcher 。 例如,您可以通過列出視圖並獲取一個來獲取它:
await CoreApplication.Views.First().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { /*do some code*/ });
您還可以在變量中記住原始窗口的調度程序,然后在共享后使用它。 如果您的代碼是異步的 ,那么在離開共享目標部分之前,您必須注意並確保它完成。
另請注意,您可以使用ApplicationViewSwitcher來顯示原始窗口(但這並不會改變共享代碼在不同線程上運行的事實)。
如果您需要有關多視圖編程的更多信息,請查看MSDN 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.