我正在 vb 2008 中开发一个应用程序,并使用后台工作人员复制文件。我有自己设计的表格,它在表格顶部播放动画和副本。对于使用“AxMSComCtl2.AxAnimation”播放动画即时消息,在执行时我得到
“无法实例化 ActiveX 控件,因为当前线程不在单线程单元中。”
在搜索中我找到了一个链接:论坛链接
但仍然在这个链接中首先我不明白在哪里插入这个片段,其次是如何在后台工作人员上实现这个想法。
请在这方面指导我。
感谢和问候,
特立独行。
您不能使用 BackgroundWorker 为该控件设置动画。它是一个 ActiveX 控件,它要求您在应用程序的主线程中创建它。创建表单的同一线程。
这是一般控件的一个非常常见的限制,它们不支持线程。
链接的线程不能解决您的问题。是的,您可以通过调用 SetApartmentState() 并指定 STA 来创建自己的 STA 线程,但现在您无法对在主线程上创建的表单执行任何操作。将控件添加到表单时会出现异常。窗体的子控件必须在与窗体相同的线程中创建。
一般来说,这应该不是问题。只要您保持表单的事件处理程序简短而活泼,动画就应该相当流畅。如果这样的事件处理程序需要做一些需要一段时间的事情(并因此冻结动画),那么让 BGW 执行该工作。
您需要使用委托并让主线程实际控制动画。您从后台线程调用委托,但它在主线程中运行。这个页面,第二个帖子,有一个粗略的想法: http ://www.vbforums.com/showthread.php?t=377205