捕获应用程序的激活事件

时间:2012-11-27 09:13:20

标签: c# windows-8 microsoft-metro

我指的是http://msdn.microsoft.com/en-us/library/windows/apps/hh464925.aspx#app_activation

    // App is an Application
    public App()
    {
        this.InitializeComponent();

        // Doesn't compile
        //this.Activated += OnActivated;

        this.Suspending += OnSuspending;
    }

    protected override void OnActivated(IActivatedEventArgs args)
    {
        System.Diagnostics.Debug.WriteLine("OnActivated");
    }

    private void OnSuspending(object sender, SuspendingEventArgs e)
    {
        var deferral = e.SuspendingOperation.GetDeferral();
        deferral.Complete();
    }

注意,永远不会触发OnActivated。在我退出应用程序大约30秒后,OnSuspending将被触发。

如何捕获Activated事件?奇怪的是,我在Activated中找不到App事件,尽管文档说明了这一点。

2 个答案:

答案 0 :(得分:2)

激活有点令人困惑。看一下这里的文档:

http://msdn.microsoft.com/en-us/library/windows/apps/br242324.aspx

您会发现,当用户点击磁贴时,只会触发OnLaunched事件(请参阅此处的文档:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.onactivated.aspx

OnActivated仅适用于普通发布之外的特殊情况。这将是以下任何一种:

OnFileActivated OnSearchActivated OnShareTargetActivated OnFileOpenPickerActivated OnFileSavePickerActivated OnCachedFileUpdaterActivated

因此,如果您真正想要在任何时候调用应用程序而无论如何调用,我建议您创建自己的私有方法,然后从OnLaunched和OnActivated调用它。这应该会触及所有激活案例。

答案 1 :(得分:1)

也许问题是你正常启动应用程序,例如,通过点击应用程序磁贴(没有事实,我只是在猜测)。在这种情况下,仅调用OnLaunched方法。

msdn