1

我正在 vb 2008 中开发一个应用程序,并使用后台工作人员复制文件。我有自己设计的表格,它在表格顶部播放动画和副本。对于使用“AxMSComCtl2.AxAnimation”播放动画即时消息,在执行时我得到

“无法实例化 ActiveX 控件,因为当前线程不在单线程单元中。”

在搜索中我找到了一个链接:论坛链接

但仍然在这个链接中首先我不明白在哪里插入这个片段,其次是如何在后台工作人员上实现这个想法。

请在这方面指导我。

感谢和问候,

特立独行。

4

2 回答 2

1

您不能使用 BackgroundWorker 为该控件设置动画。它是一个 ActiveX 控件,它要求您在应用程序的主线程中创建它。创建表单的同一线程。

这是一般控件的一个非常常见的限制,它们不支持线程。

链接的线程不能解决您的问题。是的,您可以通过调用 SetApartmentState() 并指定 STA 来创建自己的 STA 线程,但现在您无法对在主线程上创建的表单执行任何操作。将控件添加到表单时会出现异常。窗体的子控件必须在与窗体相同的线程中创建。

一般来说,这应该不是问题。只要您保持表单的事件处理程序简短而活泼,动画就应该相当流畅。如果这样的事件处理程序需要做一些需要一段时间的事情(并因此冻结动画),那么让 BGW 执行该工作。

于 2010-09-21T13:26:18.970 回答
0

您需要使用委托并让主线程实际控制动画。您从后台线程调用委托,但它在主线程中运行。这个页面,第二个帖子,有一个粗略的想法: http ://www.vbforums.com/showthread.php?t=377205

于 2010-09-21T21:40:50.627 回答