行业动态Information announcement.

主页 > 公司动态 > 行业动态 >

Silverlight 4中五种多线程编程技巧

发布时间:2019-06-12

  【IT168 专稿】Silverlight是微软重要的RIA工具,可以广泛应用于网络应用开发领域和桌面领域。事实上,自Silverlight for Windows Phone 7登台以来,Silverlight已经吸引了越来越多的开发者。与其直接的竞争对手Flash一样,Silverlight自第一个版本问世以来,已为多线程计算提供广泛而丰富的支持。整体而言,在Silverlight中引入多线程的根本动机主要是为了解决用户体验中的响应速度,进而减少单线程带来的阻塞问题。

  在本系列文章中,我想尽可能详细地总结Silverlight 4对于多线程编程技术的支持。其中提供的相关示例代码供读者朋友参考,并欢迎到我的博客()处一起作更深入的探讨。

  1.使用Thread类

  Thread类是在Silverlight中你首先应该了解的多线程编程工具。在Thread类中定义了许多成员。因为这个类也是C#编程的第一个必须;所以,在此我们不一一列举,而仅用一个具体的例子,说明这个类的基本用法。

  清单1:

       public partial class ThreadTestPage : Page

  {

  
string result ="";

  
public ThreadTestPage()

  {

  InitializeComponent();

  ThreadTestMethod();

  }

  
private void ThreadTestMethod()

  {

  System.Threading.Thread thread
=new System.Threading.Thread(DoWork);

  thread.Name
="ThreadDemo";

  thread.IsBackground
=true;

  thread.Start(
1000);

  result
+= thread.IsAlive +"\r\n";

  result
+= thread.ManagedThreadId +"\r\n";

  result
+= thread.Name +"\r\n";

  result
+= thread.ThreadState +"\r\n";

  
if (thread.Join(5000))

  {

  result
+="The specified thread has terminated within 5 seconds.\r\n";

  }

       txtMsg.Text = result;

  }

  void DoWork(
object sleepMillisecond)

  {

  System.Threading.Thread.Sleep((
int)sleepMillisecond);

  result
+="The thread terminated!\r\n";

  }

  正如上面你所看到的,要使用Thread类,要几点需要注意:

  第一,我们应该首先创建一个新的Thread对象。在上面的例子中,我们提供一个委托来指向要异步调用的方法。在这种情况下,DoWork是由一个后台线程(这里的委托类型省略)执行的方法。注意,ThreadStart委托不能带参数,而ParameterizedThreadStart委托可以带参数。后面的例子将展示相关的使用。

  第二,IsBackground属性指示这是否是一个后台线程(注意,在Silverlight中并没有区分是否是一个后台线程)。接下来,Start方法用于启动线程,传递一个整数来指定睡眠时间(毫秒)。请注意,Start方法立即返回,并且相关的代码开始在新线程上异步执行。事实上,我们甚至可以将任何对象传递给Start的方法。

  有关Start方法,请参考以下定义:

  清单2:

public void Start(

  
Object parameter

  );

public void Start(

  
Object parameter

  );

  还要注意的是,另外一个方法Join是用来阻止调用者线程(在上面的情况下,即指主线程),直到指定的线程(在上面的情况下,即指线程thread)已完成。如果指定的线程完成,则继续执行后面的语句;如果指定的线程运行比指定的时间长,还要继续进行。返回值的意义在于指定,在指定的时间内,是否完成指定的线程执行。

  现在,让我们来思考下面的十分有趣的事情:

  清单3: