English 中文(简体)
Running animation in background worker
原标题:

I m developing an application in vb 2008, and using background worker to copy file(s). I have my own designed form which plays an animationon on the top of the form along with copy. For playing animation i m using "AxMSComCtl2.AxAnimation", on execution i get

"ActiveX control cannot be instantiated because the current thread is not in a single-threaded apartment."

On search i found a link :Forum Link

But still in this link Firstly i dont understand where to insert this snippet and secondly how to implement the idea on background worker.

Please guide me in this regard.

Thanks & Regards,

Maverick.

最佳回答

You need to use a delegate and have the main thread actually control the animation. You invoke the delegate from the background thread but it runs in the main thread. This page, second post, has the rough idea: http://www.vbforums.com/showthread.php?t=377205

问题回答

You cannot use a BackgroundWorker to animate this control. It is an ActiveX control, it requires that you create it in your app s main thread. The same thread that creates the form.

This is a very common restriction for controls in general, they do not support threading.

The linked thread does not solve your problem. Yes, you can create your own STA thread by calling SetApartmentState() and specifying STA but now you cannot do anything with the Form that you created on the main thread. You ll get an exception when you add the control to the form. The child controls of a form must be created in the same thread as the form.

This should in general not be an issue. The animation ought to be reasonably smooth as long as you keep the form s event handlers short and snappy. If such an event handler needs to do something that takes a while (and freezes the animation as a result) then let a BGW perform that job.





相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签