Python: добавление двойных элементов в новый массив

Модель Threading в UI

Пожалуйста, прочитайте Threading Model в приложениях пользовательского интерфейса, чтобы понять основные понятия. Ссылка перемещается на страницу, описывающую модель потоков WPF. Тем не менее, Windows Forms использует ту же идею.

Пользовательский интерфейс

  • Существует только один поток (поток пользовательского интерфейса), которому разрешен доступ к System.Windows .Forms.Control и его подклассы.
  • Попытайтесь получить доступ к члену System.Windows.Forms.Control из другого потока, кроме потока пользовательского интерфейса, вызовет перекрестный поток Исключение.
  • Поскольку существует только один поток, все операции пользовательского интерфейса помещаются в качестве рабочих элементов в этот поток:

enter image description here [/g22]

  • Если для потока пользовательского интерфейса нет работы, тогда существуют промежутки времени ожидания, которые могут использоваться вычислениями, не связанными с UI.
  • Для использования указанных недостатков используйте System .Windows.Forms.Control.Invoke или System.Windows.Forms.Control.BeginInvoke :

enter image description here [/g23]

Методы BeginInvoke и Invoke

  • Вычисление вычислительных ресурсов вызываемого метода должно быть небольшим, а также вычислить накладные расходы на методы обработчика событий, поскольку U Здесь используется поток I - тот же самый, который отвечает за обработку ввода пользователя. Независимо от того, является ли это System.Windows.Forms.Control.Invoke или System.Windows.Forms.Control.BeginInvoke .
  • Для выполнения вычисления дорогостоящей операции всегда используйте отдельный поток. Поскольку .NET 2.0 BackgroundWorker предназначен для выполнения дорогостоящих операций в Windows Forms. Однако в новых решениях вы должны использовать шаблон async-await, описанный здесь здесь .
  • Используйте System.Windows.Forms.Control.Invoke или System.Windows.Forms.Control.BeginInvoke только для обновления пользовательского интерфейса. Если вы используете их для тяжелых вычислений, ваше приложение заблокирует:

enter image description here [/g24]

Вызвать

enter image description here [/g25]

BeginInvoke

enter image description here [/g26]

Решение для кода

Прочитать ответы на вопрос Как обновить графический интерфейс из другого потока в C #? . Для C # 5.0 и .NET 4.5 рекомендуемым решением является здесь .

0
задан Nico Schmidt 28 November 2013 в 14:02
поделиться