亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教下如何才能在Form里面隨意停止Timer?

請教下如何才能在Form里面隨意停止Timer?

C# C
楊__羊羊 2022-05-18 15:11:48
using System;using System.Threading;namespace Reminder{public class Reminder{public Timer stateTimer;public void Check(){AutoResetEvent autoEvent = new AutoResetEvent(false);StatusChecker statusChecher = new StatusChecker();TimerCallback tcb = statusChecher.CheckInventory;stateTimer = new Timer(tcb, autoEvent, 1000, 5000);//autoEvent.WaitOne(1, false);stateTimer.Change(5000, 1000);stateTimer.Dispose();}}class StatusChecker{public void CheckInventory(object stateInfo){AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;int inventoryShortageCount = 5;if (inventoryShortageCount > 0){System.Windows.Forms.MessageBox.Show("");}}}}在Form里面調用private void Form1_Load(object sender, EventArgs e){Reminder r = new Reminder();r.Check();//r.stateTimer.Dispose();//如果這樣,Timer就直接被Dispose掉了,如何才能在Form里面隨意停止Timer}autoEvent.WaitOne(1, false);stateTimer.Change(5000, 1000);stateTimer.Dispose();這三條后來測試用的,不是原來代碼
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

Threading.Timer 屬于100% 多線程
Timers.Timer 默認多線程,可設置為單線程
既然是多線程,不管通過回調 還是事件 執行任務,都是開啟的另一個線程;
你可以暫?;蜾N毀計時器(Timer)本身,但是不能操作里面新開線程的任務,這也是多線程設計的期望方式,因為你不知道 超線程里面到底執行到哪兒了。
但是,像我這種(刁民)有時候就喜歡那么橫,所以就把 新開的任務裝在一個 new Thread()里面,這樣就可以操作這個線程了,(到時只需要暴力abort() 終止這個線程就行)。

Threading.Timer 暫停: Change(-1,任意值); 啟動: Change(大于等于0,時間間隔);
Timers.Timer 暫停: Stop(); 啟動:Start();
再次提醒,這里暫停的意思是 計時器不在重新啟動,不是終止計時器的里面任務。

查看完整回答
反對 回復 2022-05-23
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

stateTimer.Change(-1, 任意值);就可以停止。
Threading.Timer 沒有Enabled屬性。

查看完整回答
反對 回復 2022-05-23
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

timer.stop()調用停止的方法呀,timer.start()開始 開始和停止是對應的呀

查看完整回答
反對 回復 2022-05-23
  • 3 回答
  • 0 關注
  • 255 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號