技术开发 频道

Silverlight 4中四种多线程编程技术

  {

  System.Threading.Thread.Sleep(
1000);

  _backgroundWorker.ReportProgress((i
+ 1) * 10, i);

  }

  }

  e.Result
= "Complete!";

  }

  void _backgroundWorker_ProgressChanged(
object sender, System.ComponentModel.ProgressChangedEventArgs e)

  {

  txtProgress.Text
= string.Format("Progress:{0}%; Parameter: {1}",

  e.ProgressPercentage,

  e.UserState);

  }

  void _backgroundWorker_RunWorkerCompleted(
object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)

  {

  
if (e.Error != null)

  {

  txtMsg.Text
+= e.Error.ToString() + "\r\n";

  }

  
else if (e.Cancelled)

  {

  txtMsg.Text
+= "Cancelled!\r\n";

  }

  
else

  {

  txtMsg.Text
+= e.Result.ToString() + "\r\n";

  }

  }

  }

  }

  整体而言,BackgroundWorker适合运行在一个单独的线程,特别是运行在一个非UI线程上且耗时的操作,以防止用户界面停止响应。上面,我们采用了一个“Cancel”按钮来取消线程的执行—通过判断线程是否可以取消(通过属性WorkerSupportsCancellation)。然后,我们调用方法CancelAsync暂停线程。相应地,该方法RunWorkerAsync用于启动线程,同时传递进可能的需要的参数。正如你所见,真正的异步工作是在方法_backgroundWorker_DoWork中进行的。同时,它使用ReportProgress方法报告当前进度,另外一个相关的方法_backgroundWorker_ProgressChanged用于负责在UI线程上呈现这个进度。一旦线程终止或暂停,另外一个相关方法_backgroundWorker_RunWorkerCompleted即被激活,并输出相关的提示信息。

  6.总结

  在本系列的两篇文章中,我们总结了开发Silverlight多线程应用程序的典型的技术支持。然而,编写多线程Silverlight应用程序并不容易,如文首所暗示的,我们刚刚触及了这些内容的皮毛。因此,在你的实际工作中考虑使用多线程编程技术之前,高度建议你借鉴一下微软有关的建议。老实说,选择多线程技术在很大程度上意味着你必须面对并发锁定和同步机制等技术问题。但无论如何,是否在Sivlerlight项目中引入多线程技术取决于你的最后决断。

0
相关文章