我想在执行某个方法时定期执行某个类的某个方法。C# 提供了三种方法来满足我的需求。由于我是 C# 编程的新手,所以我在选择正确的方法时感到困惑。根据我的研究,这三个课程是:
System.Windows.Forms.Timer
Systems.Timer
System.Diagnostics.StopWatch
我的要求很简单:当某个方法被调用时,定期执行某个方法。
请提出一个比其他人更喜欢的情况。
我想在执行某个方法时定期执行某个类的某个方法。C# 提供了三种方法来满足我的需求。由于我是 C# 编程的新手,所以我在选择正确的方法时感到困惑。根据我的研究,这三个课程是:
System.Windows.Forms.Timer
Systems.Timer
System.Diagnostics.StopWatch
我的要求很简单:当某个方法被调用时,定期执行某个方法。
请提出一个比其他人更喜欢的情况。
StopWatch
是用于测量时间,而不是用于安排事件,所以让我们排除这一点。
System.Windows.Forms.Timer
基于 Windows 窗体,需要 Windows 消息循环才能运行。是你的项目Windows Forms,那么你可以用这个。如果没有,请不要使用它(它不起作用)。
System.Timers.Timer
是一个通用定时器。我会用这个;它应该适用于所有场景,您不必担心消息循环运行。您还可以使用它的SynchronizationObject
属性使这个 Timer 自动同步。
最后,有一个System.Threading.Timer
,它不是开箱即用的线程安全的(这意味着您的方法将在工作线程上调用,因此如果您由于 UI 需要在特定线程上同步或调度,则需要自己处理) .
这些计时器有许多细微的差别,我建议您阅读MSDN 上的比较计时器类一文以了解全文。
在不了解您的具体用例的情况下,我们无法告诉您哪个是最好的。但总的来说:
System.Windows.Forms.Timer
- 每次都会在 UI 线程上调用你的函数。如果您计划在活动期间访问 UI 控件,请使用此选项。
System.Timers.Timer
- 将在工作线程上调用您的函数。在非 Windows 窗体或不需要访问任何 UI 元素的上下文中使用它
System.Diagnostics.StopWatch
- 这是为了计时需要多长时间。在这里帮不了你。