0

当前我的 App.xaml.cs 中有一个事件

    public partial class App : Application
    {
        public static event EventHandler SettingsSaved;

        private async void Application_Launching(object sender, LaunchingEventArgs e)
        {
            if (SettingsSaved != null)
            {
                SettingsSaved(this, null);
            }
     }

在我的 MainPage.xaml.cs

    public MainPage()
    {        
        InitializeComponent();

        App.SettingsSaved += App_SettingsSaved;

    }

    void App_SettingsSaved(object sender, EventArgs e)
    {
         //do something here
    }

首次启动应用程序时,SettingsSaved 工作正常,但当应用程序第二次启动时,SettingsSaved 变为空。有没有办法确保 SettingsSaved 的工作方式与第一次启动应用程序时的工作方式相同?

我是一名新手编码员,我很确定我在这里遗漏了一些非常基本的东西。

4

2 回答 2

0

与其将它放在公共 MainPage() 中,不如尝试将其放在 App.Initialize 事件中,以确保它绝对在启动时发生。

于 2013-08-20T02:15:47.650 回答
0

我想我找到了问题所在。我相信我必须先订阅事件才能触发事件,在我上面的代码中,我无法先订阅它,因为 App.xaml.cs 先执行,然后我才能在我的主页中订阅它.xaml.cs。

当我第一次启动我的应用程序时,这对我有用,因为我有一些额外的代码在等待某些东西。

我的解决方案更像是一个 hack,我在等待这样的延迟任务:

public partial class App : Application
{
    public static event EventHandler SettingsSaved;

    private async void Application_Launching(object sender, LaunchingEventArgs e)
    {
        //this await will cause the thread to jump to MainPage to subscribe to SettingsSaved event.
        await Task.Delay(500);

        if (SettingsSaved != null)
        {
            SettingsSaved(this, null);
        }
 }

当然,如果有人能想出一个更优雅的解决方案,在继续使用 App.xaml.cs 中的代码之前可以先初始化 MainPage,我将不胜感激

于 2013-08-20T18:17:03.990 回答