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