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 イベント ハンドラー内では機能しません。

app.xaml:

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

app.xaml.cs:

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

Squirrel.Windows の制限ですか? または、Application Exit イベント ハンドラーで提示されたコードを使用するために何か特別なことはありますか?

4

1 に答える 1

1

すぐに実行される「ホット」Taskを作成しているため、次のコード行に進みます。おそらく、そのコードの次の行は、アプリケーションの終了ハンドラーの終わりです。これを防ぎたい場合は、次のようにします。

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

に適切な引数を指定することで、タイムアウト/キャンセル機能を利用できます。Task.Wait

于 2015-08-18T14:57:38.957 に答える