Timer(System.Timers) 和 DispatcherTimer

转载 2012年03月24日 12:36:36

Timer组件是基于服务器的计时器,通过设置时间间隔Interval,周期性的触发Elapsed事件。

用法如下:

    class Program {
static System.Timers.Timer Timer1 = new System.Timers.Timer();
static void Main() {
Timer1.Interval = 1000;
Timer1.Elapsed += new ElapsedEventHandler(PeriodicTaskHandler);
Timer1.Start();
Console.ReadLine();
}

static void PeriodicTaskHandler(object sender, ElapsedEventArgs e) {
string str =Thread.CurrentThread.ManagedThreadId.ToString()+"##" +"Timer1" +"##" + e.SignalTime.ToLongTimeString();
Console.WriteLine(str);
}
}

 

DispatcherTimer:Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为  DispatcherTimer的操作也是放置在Dispatcher队列中的,何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。

在WPF应用程序中

Timer的Elapsed事件绑定的方法没有运行在UI线程上,如果要访问UI线程上的对象,需要利用Invoke或BeginInvoke 将操作发布到UI线程的Dispatcher上。

用法如下

private void Button_Click(object sender, RoutedEventArgs e) {
Timer timer = new Timer();
timer.Interval = 1000;
timer.Start();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

}

void timer_Elapsed(object sender, ElapsedEventArgs e) {
i++;
this.Dispatcher.Invoke(new Action(() => {
test.Content = i.ToString();
}));
}

private int i = 0;



 

DispatcherTimer与Dispatcher都运行于相同的线程,并且可以在DispatcherTimer上设置DispatcherPriority。

用法

private void Button_Click(object sender, RoutedEventArgs e) {
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}

void timer_Tick(object sender, EventArgs e) {
i++;
Test.Content = i.ToString();
}

private int i = 0;
private DispatcherTimer timer = new DispatcherTimer();

相关文章推荐

System.Timers.Timer 定时执行

C#代码 1.在Global.asax文件中导入命名空间 2.Global.asax文件中的Application_Start()方法内写如下代码: System.Tim...
  • stardtx
  • stardtx
  • 2012年03月01日 16:12
  • 864

【C#/WPF】用System.Timers.Timer计时器做浮窗广告

System.Timers.Timer

System.Timers.Timer

Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发Elapsed 事件的周期性间隔。然后可以操控此事件以提供定期处理。例如,假设您有一台关键性服务器,必须每周7 天、每天24 小时都...

.NET System.Timers.Timer的原理和使用(开发定时执行程序)

概述(来自MSDN) Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发 Elapsed 事件的周期性间隔。然后可以操控此事件以提供定期处理。例如,假设您有一台关键性服务器,必...

System.Windows.Forms.Timer和System.Timers.Timer的区别

.NET Framework里面提供了三种Timer: •System.Windows.Forms.Timer •System.Timers.Timer •System.Thre...
  • jayinIT
  • jayinIT
  • 2011年01月15日 09:10
  • 796

System.Timers.Timer与System.Windows.Forms.Timer 区别

根据msdn解释:System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。 不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行...

System.Windows.Forms.Timer与System.Timers.Timer的区别

2008-11-19 20:07488人阅读评论(0)收藏举报 一、引言     在 Visual Studio .NET 中有两种计时器控件——基于服务器的计时器和标准的基于 Windows...
  • sjj2011
  • sjj2011
  • 2012年07月17日 12:34
  • 873

C#中DispatcherTimer VS Timer

  • 2012年05月31日 10:58
  • 16KB
  • 下载

WPF中Timer与DispatcherTimer类的区别

有人问了一个问题,他想利用一个计时器Timer类,实时更新界面上的控件内容,但是一直遇到抛出异常:System.InvalidOperationException {"调用线程无法访问此对象,因为另一...
  • mpc2010
  • mpc2010
  • 2014年04月09日 11:15
  • 476

C#关于System.Timer的用法

  • 2016年06月28日 16:34
  • 290KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Timer(System.Timers) 和 DispatcherTimer
举报原因:
原因补充:

(最多只允许输入30个字)