Мы наблюдаем что-то странное, такой код:
var task = new Task(...); // run in the background, do something lengthy work
task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext());
task.Start();
Вторая задача вызывает событие, которое, в свою очередь, пытается обновить графический интерфейс, и мы получаем ужасное межпоточное исключение.
Проверка Thread.CurrentThread.ManagedThreadId
из метода во второй задаче показывает, что на самом деле он не работает в потоке пользовательского интерфейса.
Код, породивший задачи, выполняется в потоке пользовательского интерфейса.
Есть ли какой-нибудь сценарий, когда это пойдет не так?
TaskScheduler.FromCurrentSynchronizationContext
возвращает в отладчике. Что вы обнаружите, когда сделаете это? - person usr   schedule 20.03.2013