Подтвердить что ты не робот

В чем заключается использование Deployment.Current.Dispatcher.BeginInvoke(() => {...})?

Я видел этот формат Deployment.Current.Dispatcher.BeginInvoke(() = > {...}) в некотором коде. Используется ли он для работы в фоновом режиме? Каковы его общие возможности?

4b9b3361

Ответ 1

Нет, это не делать работу в фоновом потоке - это делать работу с потоком пользовательского интерфейса. Поэтому он обычно вызывается из фонового потока, чтобы манипулировать пользовательским интерфейсом, который может быть выполнен только в потоке пользовательского интерфейса.

Тело выражения лямбда - это код, который вы хотите выполнить в потоке пользовательского интерфейса.

Ответ 2

Когда код, обновляющий пользовательский интерфейс, выполняется из потока, отличного от потока пользовательского интерфейса, возникает недопустимое исключение доступа к перекрестному потоку.

Диспетчер позволяет передавать некоторый код в поток пользовательского интерфейса из другого потока.

Проект, который я поставил в этом сообщении, демонстрирует это, среди других понятий.

WebClient, HttpWebRequest и пользовательский интерфейс на Windows Phone 7

Ответ 3

вам нужно будет использовать Deployment.Current. Dispatcher в приложении SilverLight, когда вы обнаружите, что выполняете работу у не-пользовательского интерфейса thread (в контексте, который не наследуется от DependencyObject), и вам нужно обновить интерфейс.