作者siate ()
看板C_Sharp
标题[问题] Application.DoEvents, winform要点两次
时间Sat Jan 13 21:20:02 2018
我有两个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://webptt.com/cn.aspx?n=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
1F:→ testPtt: 回圈要写在别的thread跑 再去更新form的显示 01/13 22:03
我查了一下,start里改成MethodInvoker mi = new MethodInvoker(this.UpdateUI);
this.BeginInvoke(mi,null); 然後while放在UpdateUI里就成功了,虽然不太懂原理
2F:推 groovy2016: 可以看看action 01/13 23:20
3F:推 Litfal: DoEvents...好古早的用法,好怀念阿XD 01/13 23:59
※ 编辑: siate (114.40.65.145), 01/14/2018 01:39:13
4F:→ wl02099278: updateUI放控制label.text, thread事件内放while跑.. 01/14 19:30
5F:→ disabledman: 执行绪罗 01/24 20:41