Какая польза от Deployment.Current.Dispatcher.BeginInvoke (() => {...})? - PullRequest
19 голосов
/ 13 января 2011

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

Ответы [ 3 ]

41 голосов
/ 13 января 2011

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

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

6 голосов
/ 13 января 2011

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

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

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

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

2 голосов
/ 19 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...