在背景工作者中运行动画

时间:2010-09-21 13:18:41

标签: .net vb.net backgroundworker avi playing

我在vb 2008中开发了一个应用程序,并使用后台工作程序来复制文件。我有自己设计的形式,在表格的顶部和副本上播放动画。为了使用“AxMSComCtl2.AxAnimation”播放动画,执行时我得到

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

在搜索中,我找到了一个链接:Forum Link

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

请在这方面指导我。

谢谢&的问候,

小牛。

2 个答案:

答案 0 :(得分:1)

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

这对于控件来说是一个非常常见的限制,它们不支持线程化。

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

这一般不应成为问题。只要你保持表单的事件处理程序简洁明快,动画就应该相当顺利。如果这样的事件处理程序需要做一些需要一段时间的事情(并因此冻结动画),那么让BGW执行该工作。

答案 1 :(得分:0)

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