簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM