C#在新建線程中使用Timer無效問題及解決
在新建線程中使用Timer無效
在C#winform窗體設(shè)計中,我們像重復(fù)運行某一功能時,我們想到的就是使用C#的Timer控件,但如果這個功能執(zhí)行一次需要較長時間時,就會占用UI線程,從而會出現(xiàn)窗體上的控件無法選中或點擊。這個問題可以通過多線程來解決,但在多線程中,會出現(xiàn)timer控件無效的問題。
首先,我們在窗體設(shè)計頁面上選擇的timer控件,是屬于System.Windows.Forms.Timer類,這個類是無法在開辟的新線程中使用的。
若想在thread中使用,我們要用到System.Timers.Timer類的timer定時器,具體操作如下。
第一步
添加System.Timers.Timer模塊和線程模塊
using System.Timers; using System.Threading;
第二步
新建一個 System.Timers類的timer定時器和新線程
// 新建一個System.Timers類的定時器 System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 100; // 定時器的運行周期(ms) timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); // 添加調(diào)用函數(shù) void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { // 定時器執(zhí)行的語句 } Thread t1 = new Thread(new ThreadStart(t1_Run)); // 實例化新線程 t1.Start(); private void t1_Run() { timer2.Enabled = true; // 定時器開啟 }
C# Timer無法停止的解決
在用Winform做一個網(wǎng)絡(luò)爬蟲的時候發(fā)現(xiàn)C#里頭Timer調(diào)用Stop()函數(shù)卻無停止的問題。
在網(wǎng)上找,似乎說問題與線程池有關(guān)。我對線程的使用很不熟練,所以也看不明白網(wǎng)上調(diào)用線程的方法。
還好在一篇帖子的回復(fù)里找到了一個簡單的解決方法,就是在Elapse調(diào)用的方法里一開始就調(diào)用timer.stop(),結(jié)尾再調(diào)用一次timer.start();
問題果然解決了
public void main(){ ? ? myTimer = new System.Timer.Timer(LOOP_INTERVAL); ? ? myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myElapse); ? ? myTimer.Enabled = true; //myTimer啟動 } public void myElapse(object sender, System.Timers.ElapsedEventArgs e){ ? ? myTimer.Stop(); ? ? ... ? ? myTimer.Start(); }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#實現(xiàn)將網(wǎng)址生成二維碼圖片方法介紹
這篇文章介紹了C#實現(xiàn)將網(wǎng)址生成二維碼圖片的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04C#實現(xiàn)Stream與byte[]之間的轉(zhuǎn)換實例教程
這篇文章主要介紹了C#實現(xiàn)Stream與byte[]之間的轉(zhuǎn)換方法,具體講解了二進(jìn)制轉(zhuǎn)換成圖片、byte[]與string的轉(zhuǎn)換、Stream 和 byte[] 之間的轉(zhuǎn)換、Stream 和 文件之間的轉(zhuǎn)換、從文件讀取 Stream以及Bitmap 轉(zhuǎn)化為 Byte[]等,需要的朋友可以參考下2014-09-09C#在運行時動態(tài)創(chuàng)建類型的實現(xiàn)方法
這篇文章主要介紹了C#在運行時動態(tài)創(chuàng)建類型的實現(xiàn)方法,主要通過動態(tài)生成C#代碼再編譯成程序集來實現(xiàn)動態(tài)創(chuàng)建類型的,需要的朋友可以參考下2014-09-09