[英]C# System.Timers.Timer Class elapsed event and timer general precautions
两个问题。
一:在winforms应用程序中,在它的elapsed事件中启用和禁用system.timers.timer是个好主意还是坏主意,以便主UI线程可以访问在该主UI上创建的变量和方法线? 因此,例如使用代码:
myElapsedTimerEvent(object sender, ElapsedEventArgs args)
{
timer.enabled = false;
/***Call some functions and manipulate some variables***/
timer.enabled = true;
}
二:根据大家的经验,winform和c#中的system.timers.timer有哪些注意事项和需要注意的危险? 如果没有正确使用计时器,您是否可以提供有关硬件和/或软件可能发生的事情的任何示例?
任何有关使用 system.timers.timer 的建议将不胜感激。
谢谢阅读。
如果事件处理程序在 UI 线程中执行,则从事件处理程序内部设置计时器的Enabled
属性是安全的。 否则不安全,因为System.Timers.Timer
class 不是线程安全的。 要使处理程序在 UI 线程中执行,您必须将计时器的SynchronizingObject
属性设置为当前Form
。 例如:
public Form1()
{
InitializeComponent();
timer = new Timers.Timer(5000);
timer.Elapsed += Timer_Elapsed;
timer.SynchronizingObject = this;
timer.AutoReset = true;
}
如果我没记错的话,当您使用设计器在Form
中添加Timer
时,此分配会自动发生。
我的建议是使用System.Windows.Forms.Timer
,因为它没有线程安全考虑。 您不仅限于一个计时器。 您可以拥有任意数量的它们。 请记住,它们的处理程序是在 UI 线程中运行的,因此您应该避免在其中放置冗长的代码,否则 UI 的响应性可能会受到影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.