在常规间隔中执行方法的正确方法

时间:2013-08-19 16:42:55

标签: c#

我希望在执行某些方法时以常规间隔执行某个类的某个方法。 C#有三种方法可以用来满足我的需求。由于我是C#编程的新手,我很难选择正确的方法。根据我的研究,这三个类是:

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

我的要求很简单:在调用某个方法时,定期执行某个方法。

请建议一个人比其他人更受欢迎的情况。

2 个答案:

答案 0 :(得分:2)

StopWatch用于测量时间,而不是用于安排事件,所以让我们排除一个。

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

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

最后,有一个System.Threading.Timer,它不是开箱即用的线程安全(意味着您的方法将在工作线程上调用,因此如果由于UI需要在特定线程上进行同步或调度,你需要自己处理)。

这些计时器有许多微妙的差异,我建议你阅读文章Comparing the Timer Classes on MSDN了解完整的故事。

答案 1 :(得分:1)

在不知道具体用例的情况下,我们无法告诉您哪种情况最好。但总的来说:

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

System.Timers.Timer - 将在工作线程上调用您的函数。在不是Windows窗体的环境中或不需要访问任何UI元素的上下文中使用它

System.Diagnostics.StopWatch - 这是为了计算需要多长时间。这对你没用。

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