在应用程序出口管理更新

Manage update in Application Exit

使用我的 WPF 应用程序的 Squirrel.Windows, I wanted to handle the update process in the Application Exit handler 使用此代码:

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的限制吗?或者是否需要做一些特别的事情来使用应用程序退出事件处理程序中提供的代码?

由于您正在立即创建 "hot" Task 即 运行,它将继续到下一行代码。据推测,下一行代码是应用程序退出处理程序的结尾。如果您想防止这种情况发生,请执行以下操作:

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

您可以通过向 Task.Wait

提供适当的参数来使用 timeout/cancel 功能