Допустим, у меня есть 10 задач, которые должны запускаться одновременно, визуализируя их прогресс, используя GUI. Для простоты пусть они будут счетчиками от 1 до 100. Основным приложением должно быть консольное приложение. GUI элементы управления должны генерироваться на лету. Вот код, который я написал:
static void Main(string[] args)
{
Enumerable.Range(0, 10).ToList().ForEach(x =>
frm.Controls.Add(new Label()
{
Left = 10,
Top = 22 * x,
}));
Thread mThread = new Thread(delegate ()
{
frm.ShowDialog();
});
mThread.SetApartmentState(ApartmentState.STA);
mThread.Start();
Jobs();
}
static void Jobs()
{
Task[] tasks = new Task[10];
for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = PayLoad(i);
}
Task.WaitAll(tasks);
}
static async Task PayLoad(int taskNumber)
{
Console.WriteLine($"Task {taskNumber} is starting...");
//await Task.Delay(1000);
for (int i = 1; i < 100; i++)
{
Console.WriteLine($"Task {taskNumber} - iteration {i} ");
Action act = delegate () { frm.Controls[taskNumber].Text = i.ToString(); };
frm.BeginInvoke(act);
await Task.Delay(1000);
}
}
Проблема в том, что прогресс останавливается, когда все счетчики достигают 1. Если я комментирую 2-й, жду, код завершается, но я вижу, что он работает синхронно. Все ярлыки заполнены одна за другой. Я что-то пропустил?