Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制C#使用预期的计时器_C#_Timer - Fatal编程技术网

强制C#使用预期的计时器

强制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,但因为这是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
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。