0

我想在执行某个方法时定期执行某个类的某个方法。C# 提供了三种方法来满足我的需求。由于我是 C# 编程的新手,所以我在选择正确的方法时感到困惑。根据我的研究,这三个课程是:

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

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

请提出一个比其他人更喜欢的情况。

4

2 回答 2

2

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

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

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

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

这些计时器有许多细微的差别,我建议您阅读MSDN 上的比较计时器类一文以了解全文。

于 2013-08-19T16:47:11.063 回答
1

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

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

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

System.Diagnostics.StopWatch- 这是为了计时需要多长时间。在这里帮不了你。

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

于 2013-08-19T16:46:06.013 回答