C# 从启动应用程序使用应用程序协议打开新的UWP应用程序

C# 从启动应用程序使用应用程序协议打开新的UWP应用程序,c#,uwp,windows-10-universal,windowsiot,windows-iot-core-10,C#,Uwp,Windows 10 Universal,Windowsiot,Windows Iot Core 10,我可以使用windows 10和通用windows应用程序中的应用程序协议功能启动应用程序。 为此,我首先在应用程序B中的Package.appxmanifest文件中声明一个协议,然后从调用应用程序a的主应用程序运行以下代码来运行应用程序B: var success = await Launcher.LaunchUriAsync(new Uri("MyApplicationProtocolName:")); 但我面临一个问题,当主应用程序处于启动状态时,我无法使用应用程序B,我如何才能做到这

我可以使用windows 10和通用windows应用程序中的应用程序协议功能启动应用程序。 为此,我首先在应用程序B中的Package.appxmanifest文件中声明一个协议,然后从调用应用程序a的主应用程序运行以下代码来运行应用程序B:

var success = await Launcher.LaunchUriAsync(new Uri("MyApplicationProtocolName:"));

但我面临一个问题,当主应用程序处于启动状态时,我无法使用应用程序B,我如何才能做到这一点?

请仔细查看Microsoft在此主题上的示例代码。

另见:

问题在于声明协议本身不足以让应用程序响应它。您还需要在应用程序B中实施协议激活:

public partial class App
{
   protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
            Frame rootFrame = Window.Current.Content as Frame;

            if (rootFrame == null)
            {
                rootFrame = new Frame();
                rootFrame.NavigationFailed += OnNavigationFailed;
                Window.Current.Content = rootFrame;
            }
            if (rootFrame.Content == null)
            {
                rootFrame.Navigate(typeof(MainPage), e.Arguments);
            }
            Window.Current.Activate();
      }
   }
}

如果应用程序尚未启动,您需要在激活的中执行的初始化可能与仅启动的类似。如果应用程序已经在运行,你不需要做任何特殊的事情,它只会出现在前台。如果它没有运行,您必须创建主
框架
,初始化
窗口.Current.Content
,然后执行
窗口.Current.Activate()
,以激活应用程序。

c++/WinRT中的类似步骤,但应用程序卡在启动屏幕上。您需要确保
窗口
已激活。您还可以调试应用程序激活--这可能有助于发现问题