[問題] Application.DoEvents, winform要點兩次

看板C_Sharp (C#)作者時間7年前 (2018/01/13 21:20), 7年前編輯推噓2(203)
留言5則, 5人參與, 7年前最新討論串1/1
我有兩個button,start和stop 我想要按下start後在winform上顯示一直跑的數字 當按下stop就停止,程式碼大概如下 flag = 0; start { while(flag == 0) { label.Text = (i++).ToString(); Application.DoEvents(); } } stop { flag = 1; } 我原本是用label.Update(),但發現程式在跑的時候winform完全不理按鍵 後來改成application.DoEvents問題解決了 但按下start後整個介面處於忙碌狀態,游標移到button上不會變色 按一下介面後游標移到button上就有反應了,好像介面從假死狀態活過來了一樣 再按一下stop就可執行了 有方法可以讓按下start後介面是處於隨時可以按stop的狀態嗎 也就是說不用按兩下,介面隨時可接受外界觸發的狀態 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.40.65.145 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1515849605.A.05F.html ※ 編輯: siate (114.40.65.145), 01/13/2018 21:20:45 ※ 編輯: siate (114.40.65.145), 01/13/2018 21:24:05 ※ 編輯: siate (114.40.65.145), 01/13/2018 21:26:01

01/13 22:03, 7年前 , 1F
迴圈要寫在別的thread跑 再去更新form的顯示
01/13 22:03, 1F
我查了一下,start裡改成MethodInvoker mi = new MethodInvoker(this.UpdateUI); this.BeginInvoke(mi,null); 然後while放在UpdateUI裡就成功了,雖然不太懂原理

01/13 23:20, 7年前 , 2F
可以看看action
01/13 23:20, 2F

01/13 23:59, 7年前 , 3F
DoEvents...好古早的用法,好懷念阿XD
01/13 23:59, 3F
※ 編輯: siate (114.40.65.145), 01/14/2018 01:39:13

01/14 19:30, 7年前 , 4F
updateUI放控制label.text, thread事件內放while跑..
01/14 19:30, 4F

01/24 20:41, 7年前 , 5F
執行緒囉
01/24 20:41, 5F
文章代碼(AID): #1QMWU51V (C_Sharp)
文章代碼(AID): #1QMWU51V (C_Sharp)