Как сохранить отзывчивость на winform, пока идет тяжелая картина - PullRequest
1 голос
/ 28 марта 2012

Моя программа в значительной степени опирается на winform. Во время розыгрыша винформ не отвечает. Как заставить его реагировать на мою мышь? Я хочу использовать другой поток для рисования в winform, но я боюсь, что встретлю печально известную ошибку cross-threads-access-conrtrol.

Ответы [ 4 ]

2 голосов
/ 28 марта 2012

Вот отличная статья MSDN, которая может вам помочь: Предоставьте вашему .NET-приложению быстрый и отзывчивый пользовательский интерфейс с многопоточностью

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

Кроме того, вы можете взглянуть на Параллельное программирование в .NET Framework 4 .В эту серию также включена стратегия с расчетами, которые распределены по нескольким синхронизированным потокам, и все с использованием готовых коллекций .NET.Это не так сложно, как может показаться.Просто попробуйте.: -)

Кроме того, если у вас есть возможность использовать будущие усовершенствования .NET, стоит попробовать Асинхронное программирование с использованием Async и Await

1 голос
/ 29 марта 2012

Если проблема в рисовании GDI +, вы можете сделать весь свой рисунок на отдельном растровом изображении в отдельном потоке (вместо рисования непосредственно на экране) - и когда вы закончите: скопируйте весь растровый рисунок на форму.

0 голосов
/ 28 марта 2012

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

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

0 голосов
/ 28 марта 2012

Вы можете использовать класс BackgroundWorker, чтобы ваша winform реагировала. MSDN .

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