silverlight 4常用的多线程技术
WebClient或HttpRequest等Silverlight访问服务端的手段,仅提供异步方法,所以,了解Silverlight端的多线程技术,显得十分重要。
1. 跨UI线程
首先,我们要了解的是Dispatcher,Winform多线程编程时代,很多人肯定遇到过,当子线程访问UI线程的时候,MS处于规则考虑,会拒绝访问。那我们必须基于Control.Invoke、SynchronizationContext或BackgroudWorker来调用。
现在,Silverlight时代,怎么办呢?
这就不卖关子了,用 Dispatcher.BeginInvoke 就可以了。当然,要Dispatcher实现原理,还是建议,看一些大虾的文章。
2. 多个线程的同步
跨UI,多线程的问题解决了。接下来,多个线程的同步问题又出来了。可以用WaitHandle。
3. 后台线程定时器
DispatchTimer第一次亮相是在Silverlight(WPF)中作为一个后台线程计时器。与原System.Threading.Timer相比,不同之处在于DispatchTimer是真正的在后台线程中独立执行的,而定时器Timer仍然在UI线程中执行,每隔一个指定的时间接管UI线程的控制权。总体来看,DispatchTimer主要适合于调度任务的情况。在这种情况下,我们可以根据实际要求设置等待时间
4.BackgroundWorker 一直很好用
System.ComponentModel.BackgroundWorker首次出现在NET
2.0中,用于简化Windows窗体应用程序多线程交互相关的编码过程。现在,它也可用于Silverlight环境中。在后台实现中,BackgroundWorker使用了Dispatcher组件,并把所有多线程相关的复杂内容封装在一个黑盒子中,为您提供最易于使用和现成的解决方案。整体来说,BackgroundWorker非常适合从事单一的,异步的,并在后台运行的长时间的任务。