2013-08-19 6 views
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 работает так же, как и при первом запуске приложения?

Я новичок-кодер, и я уверен, что здесь отсутствует что-то действительно фундаментальное.

+0

Я не уверен, но если wp8 - это что-то вроде приложений для метро, ​​вероятно, есть отдельная часть жизненного цикла с различными обработчиками событий для возобновления. Вообще, кажется, приложения не убиты, а скорее приостановлены, а затем возобновлены. Может быть местом для начала поиска ... – Mithon

ответ

0

Вместо того, чтобы размещать его в общедоступной MainPage(), возможно, попробуйте поместить его в событие App.Initialize, чтобы убедиться, что это абсолютно происходит при запуске.

+0

Привет, я не совсем уверен, понимаю ли вы вас, но я не могу подписаться на событие из App.Initialize, потому что мне нужно получить доступ к объектам из MainPage.xaml в мой метод App_SettingsSaved. Извините, если я не понял вас правильно. –

+0

Извините, я имел в виду поставить App.SettingsSaved + = SettingsSaved внутри события MainPage.Initialize, таким образом вы можете быть уверены, что он стал назначенным. – ismellike

0

Я думаю, что я понял проблему. Я считаю, что мне нужно подписаться на мероприятие первым, прежде чем я смогу запустить событие, в моем коде выше, я не смог подписаться на него первым, потому что App.xaml.cs выполняется первым, прежде чем я могу подписаться на него на моей главной странице .xaml.cs.

Это работает для меня в первый раз, когда я начал свое приложение, потому что у меня был дополнительный код, который что-то ждал.

Мое решение является более хак, где я ждал задержанную задачу так:

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); 
     } 
} 

Конечно, я был бы признателен очень много, если кто-то может придумать более элегантное решение, где MainPage может быть сначала инициализировался, прежде чем продолжить с кодом в App.xaml.cs

Смежные вопросы