Как вызвать поток графического интерфейса в Silverlight из метода BackgroundWorker? - PullRequest
0 голосов
/ 21 июля 2010

Я использую поток BackgroundWorker для выполнения какой-либо работы вне потока GUI в Silverlight 4. Я хотел бы обновить виджеты в контексте GUI из фонового потока, но прочитал предупреждения об этом из документации Microsoft. Я понимаю, что при обмене данными из одного потока в другой возникает исключение, поскольку только поток графического интерфейса может обновлять виджеты, но для этого не предусмотрен BeginInvoke:

// BackgroundWorker thread code...

Widget.Dispatcher.BeginInvoke(() => Status.Text = "Hello");

Однако я получаю некоторые непредсказуемые результаты в моем рабочем коде.

Как правильно связываться с потоком GUI? Это происходит путем передачи коллекции результатов из метода RunWorkerCompleted?

Спасибо

Scott

1 Ответ

1 голос
/ 21 июля 2010

Вы не вызываете код GUI напрямую.

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

Существует множество вопросов (и ответов) по этому вопросу.См. Некоторые «Связанные» вопросы в правой части панели.

...