使用Squirrel.Windows,我想使用以下代码处理我的WPF应用程序的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");
}
}
});
如果我在启动时调用它,或者在执行期间在事件处理程序上调用它,而不是像这样定义的Application Exit事件处理程序内部,则此代码有效:
的App.xaml:
<Application
...
Exit="Application_Exit"
...
app.xaml.cs:
void Application_Exit(object sender, ExitEventArgs e)
{
...
}
这是Squirrel.Windows的限制吗?或者使用Application Exit事件处理程序中提供的代码有什么特别的事情吗?
答案 0 :(得分:1)
由于您正在创建一个立即运行的“热门”Task
,它将继续执行下一行代码。据推测,下一行代码是应用程序退出处理程序的结束。如果您想阻止这种情况发生,请执行以下操作:
Task.Run(async () =>
{
//do stuff here
}).Wait();
您可以通过向Task.Wait