Бег анимации в фоновом работнике
-
04-10-2019 - |
Вопрос
I Разрабатываю приложение в VB 2008 и с помощью фона рабочего для копирования файлов (ы). У меня есть собственная разработанная форма, которая играет анимацию на вершине формы вместе с копией. Для воспроизведения анимации я использую «AxmsComCtl2.axanimation», на выполнение я получаю
«ActiveX Control» 'не может быть создан, потому что текущий поток не находится в однопоточной квартире ».
На поиске я нашел ссылку:Ссылка на форуме
Но все же в этой связи сначала я не понимаю, где вставить этот фрагмент и во-вторых, как реализовать идею на фоне рабочего.
Пожалуйста, проведите меня в этом отношении.
С уважением,
Маверик
Решение
Вам необходимо использовать делегат и иметь основную тему на самом деле управлять анимацией. Вы вызываете делегата из фоновой резьбы, но он работает в главной ните. Эта страница, второй пост, имеет грубую идею:http://www.vbforums.com/showthread.php?t=377205.
Другие советы
Вы не можете использовать фоновый работа, чтобы оживить этот элемент управления. Это управление ActiveX, требует, чтобы вы создали его в основном потоке вашего приложения. Та же тема, которая создает форму.
Это очень распространенное ограничение для контроля в целом, они не поддерживают резьбу.
Связанная нить не решает вашу проблему. Да, вы можете создать собственную резьбу STA, вызывая SetApartwattate () и указав STA, но теперь вы ничего не можете сделать с формой, которую вы создали на главной ните. Вы получите исключение, когда добавляете элемент управления в форму. Дочерние элементы управления формой должны быть созданы в том же потоке, что и форма.
Это должно вообще не быть проблемой. Анимация должна быть разумно гладкой до тех пор, пока вы держите обработчики событий формы короткими и сдавшими. Если такой обработчик событий должен сделать что-то, что занимает некоторое время (и замораживает анимацию в результате), то пусть BGW выполняет эту работу.