【问题标题】:Running animation in background worker在后台工作人员中运行动画
【发布时间】:2010-09-21 13:18:40
【问题描述】:
我正在 vb 2008 中开发一个应用程序,并使用后台工作程序来复制文件。我有自己设计的表格,它在表格顶部播放动画和副本。为了播放动画我使用“AxMSComCtl2.AxAnimation”,在执行时我得到
“ActiveX 控件 '' 无法实例化,因为当前线程不在单线程单元中。”
在搜索中我找到了一个链接:Forum Link
但仍然在这个链接中首先我不明白在哪里插入这个 sn-p,其次如何在后台工作人员上实现这个想法。
请在这方面指导我。
感谢和问候,
特立独行。
【问题讨论】:
标签:
.net
vb.net
backgroundworker
avi
playing
【解决方案1】:
您不能使用 BackgroundWorker 为该控件设置动画。它是一个 ActiveX 控件,它要求您在应用程序的主线程中创建它。创建表单的同一线程。
这是一般控件的一个非常常见的限制,它们不支持线程。
链接的线程不能解决您的问题。是的,您可以通过调用 SetApartmentState() 并指定 STA 来创建自己的 STA 线程,但现在您无法对在主线程上创建的表单执行任何操作。将控件添加到表单时会出现异常。表单的子控件必须与表单在同一线程中创建。
这通常不是问题。只要您保持表单的事件处理程序简短而活泼,动画就应该相当流畅。如果这样的事件处理程序需要做一些需要一段时间的事情(并因此冻结动画),那么让 BGW 执行该工作。