網站首頁 編程語言 正文
在新建線程中使用Timer無效
在C#winform窗體設計中,我們像重復運行某一功能時,我們想到的就是使用C#的Timer控件,但如果這個功能執行一次需要較長時間時,就會占用UI線程,從而會出現窗體上的控件無法選中或點擊。這個問題可以通過多線程來解決,但在多線程中,會出現timer控件無效的問題。
首先,我們在窗體設計頁面上選擇的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); // 添加調用函數
void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// 定時器執行的語句
}
Thread t1 = new Thread(new ThreadStart(t1_Run)); // 實例化新線程
t1.Start();
private void t1_Run()
{
timer2.Enabled = true; // 定時器開啟
}
C# Timer無法停止的解決
在用Winform做一個網絡爬蟲的時候發現C#里頭Timer調用Stop()函數卻無停止的問題。
在網上找,似乎說問題與線程池有關。我對線程的使用很不熟練,所以也看不明白網上調用線程的方法。
還好在一篇帖子的回復里找到了一個簡單的解決方法,就是在Elapse調用的方法里一開始就調用timer.stop(),結尾再調用一次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();
}
原文鏈接:https://blog.csdn.net/yty2545340913/article/details/123096886
相關推薦
- 2022-05-31 postman批量執行接口測試的圖文步驟_其它綜合
- 2022-04-16 Python?import自己的模塊報錯問題及解決_python
- 2023-01-13 Pytorch如何加載自己的數據集(使用DataLoader讀取Dataset)_python
- 2023-03-26 數據結構TypeScript之鄰接表實現示例詳解_其它
- 2022-03-15 el-form-item prop屬性動態綁定不生效
- 2024-07-18 redisson分布式鎖中waittime的設置
- 2022-10-25 docker 啟用時報錯System.InvalidOperationException: Fail
- 2024-03-09 【Redis】Redis 實現分布式Session
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支