One of the challenges when developing an application is to give visual indication while a long running process is occurring. In Silverlight this can be easily achieved using the RadBusyIndicator control. However, the UI thread sometimes gets frozen. While the UI thread is frozen no control can be animated which means that the RadBusyIndicator’s animation will freeze too and this will lead to unpleasant user experience. One of the greatest enhancements introduced with Silverlight 5 was the concept of Composition thread - it allows you to animate certain elements using the GPU instead of the UI thread. This can be pretty useful when you want to show a progress bar while some heavy UI related logic is running.
In the next bullet points I will try to explain how to avoid the annoying freeze of the RadBusyIndicator while the UI thread is frozen.
<
param
name
=
"enableGpuAcceleration"
value
=
"True"
/>
<
Path
x:Name
=
"IndeterminateDonut"
… >
<
Path.CacheMode
>
<
BitmapCache
/>
</
Path.CacheMode
>
</
Path
>
As you see animating elements in Silverlight 5 on the GPU is a great and simple task that requires only a few steps.
The described approach has some limitations that should be noted. When using the described approach in Internet Explorer the RadBusyIndicator sometimes fully freezes or for the last 2 seconds of the 5 sec Thread.Sleep. This is a know limitation that is present only in Internet Explorer and currently there isn't a known workaround for it.
A sample project that demonstrates this approach can be downloaded via this link AnimateOnFrozenUI.