using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
NET.MST.Sixth.Reenter
{
class
Reenter
{
private
static
int
TestInt1=0;
private
static
int
TestInt2 = 0;
private
static
object
locko =
new
object
();
static
void
Main(
string
[] args)
{
Console.WriteLine(
"System.Timers.Timer 回调方法重入测试:"
);
TimersTimerReenter();
System.Threading.Thread.Sleep(2 * 1000);
Console.WriteLine(
"System.Threading.Timer 回调方法重入测试:"
);
ThreadingTimerReenter();
Console.Read();
}
/// <summary>
/// 展示System.Timers.Timer的回调方法重入
/// </summary>
static
void
TimersTimerReenter()
{
System.Timers.Timer timer =
new
System.Timers.Timer();
timer.Interval = 100;
timer.Elapsed += TimersTimerHandler;
timer.Start();
System.Threading.Thread.Sleep(2 * 1000);
timer.Stop();
}
/// <summary>
/// 展示System.Threading.Timer的回调方法重入
/// </summary>
static
void
ThreadingTimerReenter()
{
using
(System.Threading.Timer timer =
new
System.Threading.Timer
(
new
System.Threading.TimerCallback(ThreadingTimerHandler),
null
, 0, 100))
{
System.Threading.Thread.Sleep(2 * 1000);
}
}
/// <summary>
/// System.Timers.Timer的回调方法
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private
static
void
TimersTimerHandler(
object
sender,EventArgs args)
{
lock
(locko)
{
Console.WriteLine(
"测试整数:"
+ TestInt1.ToString());
System.Threading.Thread.Sleep(300);
TestInt1++;
Console.WriteLine(
"自增1后测试整数:"
+ TestInt1.ToString());
}
}
/// <summary>
/// System.Threading.Timer的回调方法
/// </summary>
/// <param name="state"></param>
private
static
void
ThreadingTimerHandler(
object
state)
{
lock
(locko)
{
Console.WriteLine(
"测试整数:"
+ TestInt2.ToString());
System.Threading.Thread.Sleep(300);
TestInt2++;
Console.WriteLine(
"自增1后测试整数:"
+ TestInt2.ToString());
}
}
}
}