我有一些基本的查询。我正在研究 C#.net。
- 计时器事件是在单独的线程上创建的吗?
- 我每 100 毫秒创建一个计时器事件,并调用一个执行数据库访问等任务的相同函数。如果进程无法在 100 毫秒内完成功能任务并生成下一个计时器事件,结果会怎样?
- 我应该怎么做才能避免这种情况?
我有一些基本的查询。我正在研究 C#.net。
c# 中有多个不同的计时器,有些是在单独的线程上创建的,有些是在同一个线程上运行的。
本文档 - http://msdn.microsoft.com/en-us/magazine/cc164015.aspx很好地概述了您最常看到的 3 个
从有问题的文章
+---------------------------------------------------------------------------------------+
| |System.Windows.Forms|System.Timers| System.Threading|
+----------------------------------+--------------------+-------------+-----------------+
|Timer event runs on what thread? | UI thread | UI or worker| Worker thread |
|Instances are thread safe? | No | Yes | No |
|Familiar/intuitive object model? | Yes | Yes | No |
|Requires Windows Forms? | Yes | No | No |
|Metronome-quality beat? | No | Yes* | Yes* |
|Timer event supports state object?| No | No | Yes |
|Can schedule initial timer event? | No | No | Yes |
|Class supports inheritance? | Yes | Yes | No |
+---------------------------------------------------------------------------------------+
* Depending on the availability of system resources (for example, worker threads)
如果您可以摆脱使用 Windows.Forms 计时器,则无需担心您描述的情况。
有关如何防止多个线程调用您的示例,请参阅http://blog.scosby.com/post/2009/01/04/Thread-synchronization-with-the-SystemTimersTimer-class-(part-one).aspx使用 System.Timers.Timers 时的代码