强制C#使用预期的计时器
我想使用System.Timers.Timer,但因为这是WinForm,所以已经有System.Windows.Forms.Timer了。而不是执行强制C#使用预期的计时器,c#,timer,C#,Timer,我想使用System.Timers.Timer,但因为这是WinForm,所以已经有System.Windows.Forms.Timer了。而不是执行System.Timers.Timer timerOne=new System.Timers.Timer(),是否有方法执行计时器timerOne=new Timer()通过强制使用System.Timers.Timer(或忽略System.Windows.Forms.Timer)?始终可以为类名添加别名: // Other Includes us
System.Timers.Timer timerOne=new System.Timers.Timer()代码>,是否有方法执行计时器timerOne=new Timer()代码>通过强制使用System.Timers.Timer(或忽略System.Windows.Forms.Timer)?始终可以为类名添加别名:
// Other Includes
using System.Linq;
using MyTimer = System.Timers.Timer;
MyTimer x = new MyTimer();
始终可以为类名添加别名:
// Other Includes
using System.Linq;
using MyTimer = System.Timers.Timer;
MyTimer x = new MyTimer();
添加一个using Timer=System.Timers.Timer;到源文件的顶部。请注意,此别名仅在声明它的文件中起作用;您必须将它添加到需要它的每个文件中。添加一个using Timer=System.Timers.Timer;到源文件的顶部。请注意,此别名仅在声明它的文件中起作用;您必须将它添加到每个需要它的文件中。另一个解决方案,但没有其他解决方案那么漂亮,就是创建自己的类并从timer继承它 另一个解决方案是创建自己的类并从timer继承,但没有其他解决方案那么漂亮 使用的别名形式为:
使用的别名形式:
认为这是一个不太微妙的提示,你不应该使用Studio.Time.Stime.还有一个完全解释它的理由,因为你的代码的读者不会期望它。@HansPassant抱歉,我对你的评论有点困惑。我知道人们可能看不到别名,并假设它是Windows.Form版本。否则,为什么我不应该使用System.Timers.Timer?据我所知,它不同于System.Windows.Forms.Timer。是的,它不同。它与您编写的几乎所有Winforms特定代码都非常不兼容。很少有Winforms类是线程安全的。使用Control.Begin/Invoke解决这一问题会破坏使用该计时器的意义。我在这里可能错了,但Windows不会引发事件。如果UI线程忙,而计时器版本的事件不忙,窗体版本会被忽略/不会引发?这可能是过时的信息(大约2004年):不要这样欺负人,@Hans.:)和其他任何事情一样,使用计时器也没关系。如果你自学了计时器的工作原理,就可以使用计时器。调用并不是必须要达到的目的:您可能希望在工作线程上进行一系列处理,然后调用在最后一个时刻更新UI。考虑这是一个不太微妙的提示,您不应该使用Sturth.TimeServer。还有一个完全解释它的理由,因为你的代码的读者不会期望它。@HansPassant抱歉,我对你的评论有点困惑。我知道人们可能看不到别名,并假设它是Windows.Form版本。否则,为什么我不应该使用System.Timers.Timer?据我所知,它不同于System.Windows.Forms.Timer。是的,它不同。它与您编写的几乎所有Winforms特定代码都非常不兼容。很少有Winforms类是线程安全的。使用Control.Begin/Invoke解决这一问题会破坏使用该计时器的意义。我在这里可能错了,但Windows不会引发事件。如果UI线程忙,而计时器版本的事件不忙,窗体版本会被忽略/不会引发?这可能是过时的信息(大约2004年):不要这样欺负人,@Hans.:)和其他任何事情一样,使用计时器也没关系。如果你自学了计时器的工作原理,就可以使用计时器。并且使用Control.Invoke并不一定要达到目的:您可能希望在工作线程上执行一系列处理,然后在最后一刻调用以更新UI。