繁体   English   中英

C# System.Timers.Timer Class 经过事件和定时器的一般注意事项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM