Запуск анимации в фоновом режиме - PullRequest
1 голос
/ 21 сентября 2010

Я занимаюсь разработкой приложения в vb 2008 и использую фоновый рабочий для копирования файлов.У меня есть своя собственная форма, которая воспроизводит анимацию в верхней части формы вместе с копией.Для воспроизведения анимации я использую «AxMSComCtl2.AxAnimation», при выполнении я получаю

«Элемент управления ActiveX» не может быть создан, поскольку текущий поток не находится в однопоточной квартире. »

ВклПоиском я нашел ссылку: Ссылка на форум

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

Пожалуйста, помогите мне в этом.

Спасибо и С уважением,

Маверик.

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Вы не можете использовать BackgroundWorker для анимации этого элемента управления. Это элемент управления ActiveX, он требует, чтобы вы создали его в главном потоке вашего приложения. Тот же поток, который создает форму.

Это очень распространенное ограничение для элементов управления в целом, они не поддерживают многопоточность.

Связанная тема не решает вашу проблему. Да, вы можете создать свой собственный поток STA, вызвав SetApartmentState () и указав STA, но теперь вы ничего не можете сделать с формой, созданной в основном потоке. Вы получите исключение, когда добавите элемент управления в форму. Дочерние элементы управления формы должны быть созданы в том же потоке, что и форма.

Это вообще не должно быть проблемой. Анимация должна быть достаточно плавной, если обработчики событий формы остаются короткими и быстрыми. Если такой обработчик событий должен сделать что-то, что займет некоторое время (и в результате замерзнет анимация), пусть BGW выполнит эту работу.

0 голосов
/ 22 сентября 2010

Вам нужно использовать делегата и иметь основной поток фактически контролировать анимацию.Вы вызываете делегата из фонового потока, но он работает в основном потоке.Эта страница, второе сообщение, имеет грубую идею: http://www.vbforums.com/showthread.php?t=377205

...