У меня есть приложение 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 рисунка:
Именно поэтому я понимаю - этот код работает в фоновом режиме в качестве процесса фонового работника? –
@ PedroG.Dias Squirrel - это библиотека автоматического обновления, которая проверяет удаленный файл версии xml, загружает любые установки и запускает их. Во время этого отображается баннер с индикатором выполнения. –
создать глобальный булевский переменный с именем busy. установите значение true до начала потока, false при возврате. Затем настройте событие hanlder для события onclos on.cs, чтобы проверить переменную. Если занято, скрывать и т. Д. –