2016-05-26 4 views
0

У меня есть приложение WPF, который обновляет себя на фоне (через Squirrel.Windows) это делается с помощью следующего кода:Howto определить, все нити сделаны C#

var restartApp = false; 
using (var mgr = new UpdateManager(@"http://wintst01:8282/unidealoffice/starter")) 
{ 
    var re = await mgr.UpdateApp(DownloadProgress); 
    if (re == null) 
    { 
     Debug.WriteLine("NULL"); 
    } 
    else 
    { 
     MessageBox.Show($"Applicatie is bijgewerkt en dient herstart te worden\nNieuwe versie: {re.Version}", "Update"); 
     restartApp = true; 
    } 
} 
if (restartApp) 
{ 
    UpdateManager.RestartApp(); 
} 

Этот код находится в OnStartup()App.xaml.cs Это вызов Async и Await, поэтому это будет сделано в фоновом режиме. Теперь я хочу знать, возможно ли это до того, как я закрою свое приложение. Я вижу, запущен ли этот поток, который запущен. Если так, я не могу закрыть приложение, но я хочу скрыть значок из панели задач и свернуть приложение. Так что я все еще могу обновить, когда он закончит, я хочу закрыть приложение ...

Надеюсь, кто-то может указать мне в правильном направлении.

UPDATE: Вот полный код моего OnStartup в App.xaml.cs

protected override async void OnStartup(StartupEventArgs e) 
    { 
     this.Dispatcher.UnhandledException += Dispatcher_UnhandledException; 
     for (int i = 0; i < e.Args.Length; i++) 
     { 
      if (e.Args[i].ToLower() == "/ForceInstall".ToLower() || e.Args[i].ToLower() == "-ForceInstall".ToLower() || e.Args[i].ToLower() == "-F".ToLower() || e.Args[i].ToLower() == "/F".ToLower()) 
      { 
       ApplicationConstants.Instance.ForceInstall = true; 
      } 
     } 

     base.OnStartup(e); 

     var restartApp = false; 
     using (var mgr = new UpdateManager(@"http://wintst01:8282/unidealoffice/starter")) 
     { 
      var re = await mgr.UpdateApp(DownloadProgress); 
      if (re == null) 
      { 
       Debug.WriteLine("NULL"); 
      } 
      else 
      { 
       MessageBox.Show($"Applicatie is bijgewerkt en dient herstart te worden\nNieuwe versie: {re.Version}", "Update"); 
       restartApp = true; 
      } 
     } 
     if (restartApp) 
     { 
      UpdateManager.RestartApp(); 
     } 
    } 

Что я пытаюсь сделать, это определить, если Белка есть обновление, они будут автоматически загружать все необходимые файлы и применять их после перезапуска приложения. Но поскольку это приложение является своего рода стартером для другого приложения, которое проверяет наличие обновлений для этого приложения и устанавливает (распаковывает) их, оно закроется после завершения установки и установки приложения. Но если приложение стартера все еще само по себе обновляется, его нельзя закрыть и перезапустить.

Так краткое объяснение с помощью простого VISIO рисунка: The Visio drawing

+0

Именно поэтому я понимаю - этот код работает в фоновом режиме в качестве процесса фонового работника? –

+0

@ PedroG.Dias Squirrel - это библиотека автоматического обновления, которая проверяет удаленный файл версии xml, загружает любые установки и запускает их. Во время этого отображается баннер с индикатором выполнения. –

+0

создать глобальный булевский переменный с именем busy. установите значение true до начала потока, false при возврате. Затем настройте событие hanlder для события onclos on.cs, чтобы проверить переменную. Если занято, скрывать и т. Д. –

ответ

1
private Task updateTask; 

protected override async void OnStartup(StartupEventArgs e) 
{ 
    updateTask = StartupAsync(e); 
} 

private Task StartupAsync(StartupEventArgs e) 
{ 
    this.Dispatcher.UnhandledException += Dispatcher_UnhandledException; 
    for (int i = 0; i < e.Args.Length; i++) 
    { 
     if (e.Args[i].ToLower() == "/ForceInstall".ToLower() || e.Args[i].ToLower() == "-ForceInstall".ToLower() || e.Args[i].ToLower() == "-F".ToLower() || e.Args[i].ToLower() == "/F".ToLower()) 
     { 
      ApplicationConstants.Instance.ForceInstall = true; 
     } 
    } 

    base.OnStartup(e); 

    var restartApp = false; 
    using (var mgr = new UpdateManager(@"http://wintst01:8282/unidealoffice/starter")) 
    { 
     var re = await mgr.UpdateApp(DownloadProgress); 
     if (re == null) 
     { 
      Debug.WriteLine("NULL"); 
     } 
     else 
     { 
      MessageBox.Show($"Applicatie is bijgewerkt en dient herstart te worden\nNieuwe versie: {re.Version}", "Update"); 
      restartApp = true; 
     } 
    } 
    if (restartApp) 
    { 
     UpdateManager.RestartApp(); 
    } 
} 

В случае закрытия теперь вы можете ждать updateTask и/или проверить состояние задачи.

 Смежные вопросы

  • Нет связанных вопросов^_^