定期执行方法的正确方式

本文关键字:方式 方法 执行 | 更新日期: 2023-09-27 18:28:10

我想在执行某个方法时,以规则的间隔执行类的某个方法。C#有三种方法可以满足我的需求。由于我是C#编程的新手,所以在选择正确的方法时感到困惑。根据我的研究,这三个类别是:

 System.Windows.Forms.Timer
 Systems.Timer
 System.Diagnostics.StopWatch

我的要求很简单:当某个方法被调用时,以规则的间隔执行该方法。

请说明一个人比其他人更受欢迎的情况。

定期执行方法的正确方式

StopWatch用于测量时间,而不是调度事件,所以让我们排除这一点。

System.Windows.Forms.Timer基于Windows窗体,需要运行Windows消息循环。是您的项目Windows窗体,则可以使用此。如果没有,就不要使用它(它不起作用)。

System.Timers.Timer是一个通用定时器。我会用这个;它应该适用于所有场景,您不必担心消息循环的运行。您还可以使用该Timer的SynchronizationObject属性使其自动同步。

最后,还有一个System.Threading.Timer,它不是现成的线程安全的(这意味着你的方法将在工作线程上被调用,所以如果你因为UI而需要在特定线程上进行同步或调度,你需要自己处理)。

这些计时器有很多细微的区别,我建议您阅读MSDN上的文章《比较计时器类》以了解完整的故事。

在不了解您的具体用例的情况下,我们无法告诉您哪一个是最好的。但总的来说:

System.Windows.Forms.Timer-每次都会在UI线程上调用您的函数。如果您计划在活动期间访问UI控件,请使用此选项。

System.Timers.Timer-将在工作线程上调用您的函数。在非Windows窗体或不需要访问任何UI元素的情况下使用

System.Diagnostics.StopWatch——这是用来计时事情需要多长时间。这对你没有帮助。

请参阅:http://msdn.microsoft.com/en-us/magazine/cc164015.aspx