Предотвратить анимированный GIF WinForms PictureBox от приостановки во время обработки? - PullRequest
1 голос
/ 14 января 2011

У меня есть форма с двумя элементами управления. Элемент управления 1 имеет несколько критериев поиска, и пользователь может нажать кнопку, чтобы начать поиск. Control 2 имеет GridView, который будет отображать результаты поиска, а также имеет PictureBox с анимированным GIF в нем.

Элемент управления 1 содержит метод, который имеет вложенный цикл foreach, выполнение которого занимает более 5 минут (зависит от критериев поиска, иногда он заканчивается почти мгновенно).

Что происходит, так это то, что я вызываю метод в Control 2, который делает PictureBox видимым, и запускается анимированный Gif. Как только выполняется цикл foreach, который занимает некоторое время, изображение полностью останавливается. Всякий раз, когда я показываю какие-либо MessageBoxes, изображение запускается снова (я предполагаю, что это потому, что MessageBox блокируется). Как только MessageBox закрывается, изображение перестает анимироваться.

Полагаю, мне понадобится что-то использовать с многопоточностью, но все, что я пытаюсь (ImageAnimator, Thread вызывает метод, который вызывает Invoke и т. Д.), Похоже, не работает. Любые намеки, с какими событиями / библиотеками мне нужно работать, чтобы это работало? Есть хорошие примеры для подражания?

Ответы [ 2 ]

8 голосов
/ 14 января 2011

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

2 голосов
/ 14 января 2011

2 слова: класс BackgroundWorker. http://msdn.microsoft.com/en-us/library/waw3xexc.aspx

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