我希望在执行某些方法时以常规间隔执行某个类的某个方法。 C#有三种方法可以用来满足我的需求。由于我是C#编程的新手,我很难选择正确的方法。根据我的研究,这三个类是:
System.Windows.Forms.Timer
Systems.Timer
System.Diagnostics.StopWatch
我的要求很简单:在调用某个方法时,定期执行某个方法。
请建议一个人比其他人更受欢迎的情况。
答案 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
- 这是为了计算需要多长时间。这对你没用。