2014-02-11 4 views
0

Я разрабатываю приложение, в котором приложение задает вопрос пользователю, несколько фактически - например, спрашивают, хочет ли пользователь оценивать приложение. Мне нужно запустить этот метод, но это значительно увеличивает время запуска приложения. Как я могу запустить это в фоновом режиме? Я проверил другие вопросы о переполнении стека без особой помощи. Метод, который должен быть запущен в фоновом режиме:Выполнение метода в фоновом режиме

Called просто так:

checkUserStats(); 

Метод:

private void checkUserStats() 
{ 
    // Load settings from IsolatedStorage first 
    try 
    { 
     userRemindedOfRating = Convert.ToBoolean(settings["userRemindedOfRating"].ToString()); 
    } 
    catch (Exception) 
    { 
     userRemindedOfRating = false; 
    } 

    try 
    { 
     wantsAndroidApp = Convert.ToBoolean(settings["wantsAndroidApp"].ToString()); 
    } 
    catch (Exception) 
    { 
     wantsAndroidApp = false; 
    } 

    //Check if the user has added more 3 notes, if so - remind the user to rate the app 
    if (mainListBox.Items.Count.Equals(4)) 
    { 
     //Now check if the user has been reminded before 
     if (userRemindedOfRating.Equals(false)) 
     { 
      //Ask the user if he/she wants to rate the app 
      var ratePrompt = new MessagePrompt 
      { 
       Title = "Hi!", 
       Message = "I See you've used the app a little now, would u consider doing a review in the store? It helps a lot! Thanks!:)" 
      }; 
      ratePrompt.IsCancelVisible = true; 
      ratePrompt.Completed += ratePrompt_Completed; 
      ratePrompt.Show(); 

      //Save the newly edited settings 
      try 
      { 
       settings.Add("userRemindedOfRating", true); 
       settings.Save(); 
      } 
      catch (Exception) 
      { 
      } 

      //Update the in-memory boolean 
      userRemindedOfRating = true; 
     } 
     else if (userRemindedOfRating.Equals(true)) 
     { 
      // Do nothing 
     } 
    } 
    else 
    { 
    } 

    // Ask the user if he/she would like an android app 
    if (wantsAndroidApp.Equals(false)) 
    { 
     // We haven't asked the user yet, ask him/her 
     var androidPrompt = new MessagePrompt 
     { 
      Title = "Question about platforms", 
      Message = "Hi! I just wondered if you wanted to have this app for android? If so, please just send me a quick email. If enough people wants it, I'll create it:)" 
     }; 
     androidPrompt.IsCancelVisible = true; 
     androidPrompt.Completed += androidPrompt_Completed; 
     androidPrompt.Show(); 

     //Save the newly edited settings 
     try 
     { 
      settings.Add("wantsAndroidApp", true); 
      settings.Save(); 
     } 
     catch (Exception) 
     { 
     } 

     //Update the in-memory boolean 
     wantsAndroidApp = true; 
    } 
    else if (wantsAndroidApp.Equals(true)) 
    { 
     // We have asked the user already, do nothing 
    } 
} 

Я попытался это сейчас:

Использование:

using System.ComponentModel; 

Декларация :

BackgroundWorker worker; 

Initialization:

worker = new BackgroundWorker(); 
worker.DoWork+=worker_DoWork; 

Метод:

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    checkUserStats(); 
} 

Но это вызывает System.UnauthorizedAccessException: Invalid доступ кросс-нить в моих App.xaml.cs

ответ

0

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

«Класс Silverlight BackgroundWorker обеспечивает простой способ запуска отнимающих много времени операций в фоновом потоке. Класс BackgroundWorker позволяет проверить состояние операции и отменить операцию. Когда вы используете класс BackgroundWorker, вы можете указать ход работы, завершение и отмену в пользовательском интерфейсе Silverlight. Например, вы можете проверить, завершена или отменена фоновая операция, и отобразите сообщение пользователю. '

Вам просто нужно инициализировать объект backgroundworker и подписаться на его событие DoWork.

И средство для исключения

private void worker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     Dispatcher.BeginInvoke(() => 
     { 
     checkUserStats(); 
     }); 
    } 

просто взглянуть на эту статью msdn и одной more статьи.

+0

см. Обновленный вопрос пожалуйста – Erik

+0

проверить изменения в ответе –

+0

Это сделало мой день! Спасибо Аману! :) – Erik

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