0

使用Squirrel.Windows,我想使用以下代码在我的 WPF 应用程序的Application Exit 处理程序中处理更新过程:

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

如果我在启动时调用它,或者在执行期间在事件处理程序上调用它,则这段代码可以工作,但不能在这样定义的 Application Exit 事件处理程序中调用:

应用程序.xaml:

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

应用程序.xaml.cs:

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

它是 Squirrel.Windows 的限制吗?或者有什么特别的事情可以使用应用程序退出事件处理程序中提供的代码吗?

4

1 回答 1

1

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

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

您可以通过提供适当的参数来使用超时/取消功能Task.Wait

于 2015-08-18T14:57:38.957 回答