Invoke
в Dispatcher - это блокирующий вызов как для фонового потока вашей Задачи, так и для потока пользовательского интерфейса (как только он решит фактически выполнить ваш код).
Иногда это кажется асинхронным, потому что поток пользовательского интерфейса показывает новую вкладку, и поэтому Invoke
из фонового потока блокируется, пока поток пользовательского интерфейса не успеет обработать его. Когда кажется, что это синхронно, вызов Invoke обрабатывается потоком пользовательского интерфейса до , когда отображается новая вкладка. Итак, в конце концов, я думаю, что у вас есть состояние гонки.
Чтобы решить эту проблему, вам может потребоваться рефакторинг метода LoadMyObject
, чтобы его можно было запускать в фоновом потоке, или вы можете использовать метод Dispatcher.BeginInvoke и предоставить ему более низкий приоритет, чтобы обеспечить отображение новой вкладки предшествует обработке LoadMyObject
вызова