1

我有一些基本的查询。我正在研究 C#.net。

  1. 计时器事件是在单独的线程上创建的吗?
  2. 我每 100 毫秒创建一个计时器事件,并调用一个执行数据库访问等任务的相同函数。如果进程无法在 100 毫秒内完成功能任务并生成下一个计时器事件,结果会怎样?
  3. 我应该怎么做才能避免这种情况?
4

2 回答 2

0
  1. 如果您谈论 System.Timers.Timer,那么是的。
  2. Timer 事件在另一个 ThreadPool 线程上调用。请看这个: http: //msdn.microsoft.com/en-us/library/system.timers.timer (v=vs.100).aspx
  3. 我建议重新考虑您的解决方案,并完全避免使用计时器。您可以使用其他同步机制,例如信号量,......这取决于您的情况。
于 2013-04-09T13:40:24.437 回答
0

c# 中有多个不同的计时器,有些是在单独的线程上创建的,有些是在同一个线程上运行的。

本文档 - http://msdn.microsoft.com/en-us/magazine/cc164015.aspx很好地概述了您最常看到的 3 个

  • System.Windows.Forms.Timer
  • System.Timers.Timer
  • System.Threading.timer

从有问题的文章

+---------------------------------------------------------------------------------------+
|                                  |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 时的代码

于 2014-04-30T16:49:49.360 回答