Я добавил форму заставки в приложение C # WinForms для отображения во время инициализации приложения / проверки обновлений. Я использую Squirrel.Windows для проверки обновлений в Program.cs.
После добавления заставки, вызов Task.WaitAll в Main () никогда не возвращается. Этот вызов работал, как я и ожидал, до добавления заставки.
Что я могу сделать, чтобы задача завершилась в Main (), когда на переднем плане отображается заставка?
Рабочий пример:
static void Main()
{
try
{
using (var mgr = new UpdateManager("xxxx"))
{
var task = mgr.UpdateApp();
task.RunSynchronously();
Task.WaitAll(task);
Console.WriteLine(task.Status);
}
}
catch (Exception ex)
{
logger.Debug(ex.Message);
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new XForm());
}
нерабочий пример:
static void Main()
{
var ss = new SplashScreen();
Application.Run(ss);
try
{
using (var mgr = new UpdateManager("xxxx"))
{
var task = mgr.UpdateApp();
task.RunSynchronously();
Task.WaitAll(task);
Console.WriteLine(task.Status);
}
}
catch (Exception ex)
{
logger.Debug(ex.Message);
}
ss.Close();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new XForm());
}
Я прочитал кучу SO сообщений, описывающих блокировку на Task.WaitAll, но я не могу найти прямого объяснения явлений, которые я здесь вижу, т.е.
Синхронно ожидает асинхронную операцию и почему Wait () останавливает программу здесь
Как запустить синхронный метод асинхронной задачи ?
Я попытался предложить вызов task.RunSynchronously (), но, похоже, это не имело значения.