Управление обновлением в выходе из приложения

Используя Squirrel.Windows, я хотел обработать процесс обновления в обработчике выхода приложения моего приложения WPF, используя этот код:

Task.Run(async () =>
{
  using (var mgr = new UpdateManager(Settings.Default.UpdatePath))
  {
     var release = await mgr.UpdateApp();
     if (release != null && release.Version > Assembly.GetEntryAssembly().GetName().Version)
     {
        MessageBox.Show("Update applied");
     }
   }
});

Этот код работает, если я вызываю его при запуске или обработчике события во время выполнения, но не внутри обработчика события выхода приложения, определенного следующим образом:

App.xaml:

<Application 
   ...
      Exit="Application_Exit"
   ...

App.xaml.cs:

void Application_Exit(object sender, ExitEventArgs e)
   {
   ...
   }

Это ограничение Squirrel.Windows? Или есть что-то особенное, чтобы использовать код, представленный в обработчике события выхода из приложения?

1 ответ

Решение

Так как вы создаете "горячий" Task который запускается немедленно, он переходит к следующей строке кода. Предположительно, следующая строка кода является концом обработчика выхода вашего приложения. Если вы хотите предотвратить это, сделайте:

Task.Run(async () =>
{
  //do stuff here
}).Wait();

Вы можете использовать функции тайм-аута / отмены, предоставляя соответствующие аргументы Task.Wait

Другие вопросы по тегам