Когда требуется вызывать объекты GUI? - PullRequest
3 голосов
/ 05 апреля 2011

Используя C # Windows.Forms, нужно ли запускать методы Invalidate (), Refresh () и т. Д. В основном потоке / графическом интерфейсе (требуется Invoke / BeginInvoke)? Как насчет изменений в членах объекта GUI, таких как добавление / удаление точек или изменение цвета серии в объекте Charting.Chart?

У меня есть некоторые из этих изменений, происходящих в рабочем потоке без каких-либо проблем (так что я думаю, что они в порядке?), Но я пытаюсь различить, какие изменения необходимы для расширения в потоке GUI и какие изменения могут произойти в объект в рабочем потоке. У кого-нибудь есть ссылка или ссылка на книгу с указаниями по этому вопросу?

Ответы [ 3 ]

4 голосов
/ 05 апреля 2011

В общем, вы обычно должны предполагать, что ВСЕ изменения элементов GUI должны быть сделаны в потоке пользовательского интерфейса.

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

1 голос
/ 05 апреля 2011

Вы не можете выполнять синхронные вызовы методов, которые управляют элементами управления WinForms в рабочем потоке.

Я не уверен, что означает «добавление / удаление точек» или класс Charting.Chart.Этот класс может инкапсулировать вызов потока GUI самостоятельно.

Вообще говоря, если вы изменяете размер, текст, цвет фона или другие свойства элемента управления, для этого необходимо использовать Invoke / BeginInvoke.

0 голосов
/ 05 апреля 2011

Это должно сказать вам Control.InvokeRequired

...