Я тестировал кусок кода TPL, который я написал ниже. Два ManagedThreadId отображают разные числа. Поэтому я предполагаю, что новая задача выполняется в потоке без пользовательского интерфейса.
Мой вопрос: как задача может отображать сообщение и изменять элемент управления пользовательского интерфейса? Я что-то упустил. Я подумал, что мне нужно получить ссылку на SynchronizationContext интерфейса пользователя и использовать его для внесения изменений в интерфейс других потоков.
//var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString());
Task testTask = new Task(() => {
MessageBox.Show(
Thread.CurrentThread.ManagedThreadId.ToString());
lblTest.Text = "Test";
});
testTask.Start();
Дополнительно:
Скачать VS решение здесь
Дополнение 2
Может ли кто-нибудь протестировать решение и указать, получит ли он исключение или нет?