关于Winform的Timer控件问题
请问Timer 控件是多线程的吗??比如我设置Timer 每 10秒执行一个事件,如果 单个事件 10秒内执行不完,那 10秒后,程序还会在进入吗???
--------------------编程问答-------------------- Timer 在winform下有3个,其中就有一个线程Timer
至于10秒后,程序还会不会进入
就要你自己的逻辑判断了,
可以选择进入,也可以阻塞不进入 --------------------编程问答--------------------
3个是指什么意思?如何选择阻塞不进入?求指教 --------------------编程问答-------------------- 会出现事件的重入
办法:
Timer.AutoReset = false;
....
时间触发函数:
try
{
Timer.Stop();
你自己的业务
}
catch{}
finally
{
Timer.Start();
}
这样保证在你业务没有处理完毕前,定时器不会重启 --------------------编程问答-------------------- 等上一次完成后才进入下一次,如果超时了,就超时执行 --------------------编程问答--------------------
设个状态标志,private bool finished=true;
Timer的那个事件中:
if(finished)
{
finished=false;
//do your sth.
finished=true;
} --------------------编程问答-------------------- 不是多线程的。 --------------------编程问答--------------------
static void Main(string[] args)
{
System.Threading.Timer timer = new Timer(A,null,0,500);
}
private static void A(object o)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId );
Thread.Sleep(3000);
}
这样你可以看到Write了不同的线程Id。System.Threading.Timer 这个Timer是多线程的。如果当前在工作的那个A还没结束就会开新线程。 --------------------编程问答-------------------- 这种问题试下就知道了。 --------------------编程问答--------------------
http://www.cnblogs.com/shang20017/archive/2009/03/16/1413798.html --------------------编程问答-------------------- 如果执行不完的话就不会再去进入的,因为它只会按照你设定的时间去执行,不会管是否执行完了······ --------------------编程问答--------------------
似乎需要加lock和异常俘获机制更安全些个
lock(Timer)
{
if(finished)
{
finished=false;
try
{
//do your sth.
}
catch{}
finally
{
finished=true;
}
}
}
--------------------编程问答--------------------
补充:.NET技术 , C#