C#中提供了三种类型的计时器: private void formsTimer_Tick(object sender, EventArgs e)
{ i++; lblSubThread.Text += "子线程执行,线程ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + "\r\n"; }
System.Timers.Timer timersTimer = new System.Timers.Timer();
timersTimer.Enabled = false; timersTimer.Interval = 100; timersTimer.Elapsed += new System.Timers.ElapsedEventHandler(timersTimer_Elapsed); timersTimer.SynchronizingObject = this; 通过这种方式来使用,实验效果几乎和基于 Windows 的标准计时器一样,只是在上面的第二条实验中,虽然也会暂停子线程的执行,不过在5秒之后把之前排队的任务都执行掉(也就是不会少输出几行值) delegate void SetTextCallback(string text);
. . void timersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //使用代理 string text = "子线程执行,线程ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + "\r\n"; SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); i++; } private void SetText(string text) { lblSubThread.Text += text; } 这样我们再次实验就会得到如下的结果: 三、线程计时器(System.Threading.Timer) System.Threading.Timer threadTimer; public void ThreadMethod(Object state) { //使用代理 string text = "子线程执行,线程ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + "\r\n"; SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); i++; } private void Form1_Load(object sender, EventArgs e) { threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ThreadMethod), null, -1, -1); } 暂停代码:
分类: .Net |
|
来自: kittywei > 《111.34-线程》