似乎System.Timers.Timer实例通过某种机制保持活跃,但System.Threading.Timer实例却没有.
示例程序,具有定期System.Threading.Timer和自动重置功能System.Timers.Timer:
class Program
{
static void Main(string[] args)
{
var timer1 = new System.Threading.Timer(
_ => Console.WriteLine("Stayin alive (1)..."),
null,
0,
400);
var timer2 = new System.Timers.Timer
{
Interval = 400,
AutoReset = true
};
timer2.Elapsed += (_, __) => Console.WriteLine("Stayin alive (2)...");
timer2.Enabled = true;
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Invoking GC.Collect...");
GC.Collect();
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序(.NET 4.0 Client,Release,在调试器之外)时,只有System.Threading.TimerGC是:
Stayin alive (1)...
Stayin alive (1)...
Stayin alive (2)...
Stayin alive (1)...
Stayin …Run Code Online (Sandbox Code Playgroud) 我有一个使用Jabber-net(XMPP库)的应用程序的消息传递方面.
我想做什么,如果由于某种原因与服务器的连接结束,就是每隔一分钟左右继续尝试连接.
如果我在下一次尝试之前启动一个Timer等待一段时间,那个定时器是否异步运行并且生成的Tick事件加入主线程,还是我需要启动自己的线程并从那里启动定时器?