服务器计时器

来源:互联网 发布:linux搭建smb服务器 编辑:程序博客网 时间:2024/05/16 12:21

服务器计时器使用注意事项总结:

1:**/

2:**/

 

 

一、多线程调用。

服务器计数器是基于多线程的。基于ThreadPool支持。

Elapsed 事件在 ThreadPool 线程上引发。如果 Elapsed 事件的处理时间比 Interval 长,在另一个 ThreadPool 线程上将会再次引发此事件。因此,事件处理程序应当是可重入的。

 

如果 Timer 应在每次间隔结束时引发 Elapsed 事件,则为 true;默认为 true;

 

 

 

 

结果如下:

 

线程 0x6ac 已退出,返回值为 0 (0x0)。
线程 0x6e0 已退出,返回值为 0 (0x0)。
:::::::::::::::::::::::::::::::True
ManagedThreadId:   7
0
:::::::::::::::::::::::::::::::True
ManagedThreadId:   7
1
ManagedThreadId:   12
0
ManagedThreadId:   7
2
:::::::::::::::::::::::::::::::True
ManagedThreadId:   12
1
ManagedThreadId:   7
0
ManagedThreadId:   12
2
:::::::::::::::::::::::::::::::True
ManagedThreadId:   7
1
ManagedThreadId:   12
0
ManagedThreadId:   7
2
:::::::::::::::::::::::::::::::True
ManagedThreadId:   12
1
ManagedThreadId:   7
0
ManagedThreadId:   12
2

 

 

 

 

二、服务器计时器可以在线程之间移动来处理引发的事件

 

SynchronizingObjectnullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing 时,将从系统线程池中的某个线程上调用处理 Elapsed 事件的方法。有关系统线程池的更多信息,请参见 ThreadPool。

当 Elapsed 事件由可视化 Windows 窗体组件(如按钮)处理时,通过系统线程池访问组件可能导致异常,或者可能不管用。为避免这种情况,可将 SynchronizingObject 设置为 Windows 窗体组件,该组件将导致在创建它的同一线程上调用处理 Elapsed 事件的方法。

如果在 Windows 窗体设计器的 Visual Studio 中使用 Timer,则 SynchronizingObject 自动设置为包含 Timer 的控件。例如,如果将 Timer 放在 Form1(它从 Form 继承)的设计器上,则 Timer 的 SynchronizingObject 属性设置为 Form1 的实例。

原创粉丝点击