多线程的计时器

System.Thread.Timer是一个多线程的计时器。这是一个简单的轻量级的计时器,使用回调方法,并由线程池中线程提供相应的服务。让我们看一个相关的例子:

  清单2:(参考示例页面TimerTestPage.xaml)

  namespace SilverlightMultiThread

  {

  public partial class TimerTestPage : Page

  {

  System.Threading.SynchronizationContext _syncContext;

  System.Threading.Timer _timer;

  private int _flag = 0;

  public TimerTestPage()

  {

 

  {

  InitializeComponent();

  //UI线程

  _syncContext = System.Threading.SynchronizationContext.Current;

  //输出当前时间

  txtMsg.Text = DateTime.Now.ToString() + "\r\n";

  _timer = new System.Threading.Timer(MyTimerCallback, "helltimer", 3000, 1000);

  }

  private void MyTimerCallback(object state)

  {

  string result = string.Format("{0} - {1}: \r\n", DateTime.Now.ToString(), (string)state);

  _syncContext.Post(delegate { txtMsg.Text += result; }, null);

  _flag++;

  if (_flag == 5)

  _timer.Change(5000, 500);

  else if (_flag == 10)

  _timer.Dispose();

  }

  }

  }

  有以下几点值得注意。

  第一,明确传递给定时器的参数:方法MyTimerCallback表示在线程池中执行的方法。第二个参数(在本例中的字符串)代表了传递给方法MyTimerCallback的内容。第三个参数详细说明方法MyTimerCallback被调用之前迟延时间的长短,以毫秒为单位。第四个参数是调用MyTimerCallback方法的时间间隔的说明,以毫秒为单位。

  第二,我们已经使用了SynchronizationContext对象,因为线程上下文是清晰易知的。还要注意,在方法MyTimerCallback中我们调用了它的Post方法来修改UI线程中的内容。最后,通过定时器的Change方法,我们指定在该方法执行5次后,把开始时间设置为五分钟,计时器方法调用的时间间隔为5毫秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值