永发信息网

c#.net 如何给一个Label控件的Text赋值并立即让它显示出来。

答案:7  悬赏:40  手机版
解决时间 2021-02-06 07:26
c#.net 如何给一个Label控件的Text赋值并立即让它显示出来。
最佳答案
Labelname.Text=“内容”;
放到线程中去执行,不要把主线程阻塞了。你的while循环太长的话会造成界面线程假死。
首先在form的load事件中加入一下内容:
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
//使用另外的线程启动showit函数显示内容
Thread t = new Thread (showit);
t.Start();
}
void showit()
{
int i = 0;
while (i <=10000)
{
label.Text = i;
i++;
}
}
全部回答
在窗体中加个timer控件,在timer的tick事件里加上事件时间之间的间隔
this.Text1="这是一个Label";
this.show();
这应该是你直接在主线程中执行了该段代码的原因所致。要实现你的效果,将这段代码放到另一个线程中去。
使用的Label控件如果名称是label1,
那么可以这样写:
label1.text="abcdef"
label1.refresh()
主线程长时间操作窗体,就会卡住,也就是你说的赋值不会立即显示出来,我教你一招。
int i = 0;
while (i <=10000)
{
label.Text = i;
Application.DoEvents();
i++;
}
加上中间的这句Application.DoEvents,就可以了。
我来告诉你为什么只有当整个循环结束了,才会显示10000在label上
并不是因为CPU速度太快的原因!就算CPU再慢,你也看不到0~9999这些数字
对于一个窗体程序来说,有一个主线程去维护整个界面的显示和刷新,你在这个主线程上面所做的操作是会阻止这个显示和刷新的动作的,即:
while (i <=10000)
{
label.Text = i;//当执行完这个语句的时候,虽然label.Text的值变成了i,但是它不会立刻刷新界面,因为你的循环还没结束,显示和刷新动作无法执行,只有当你的所有操作都结束了,显示和刷新才可能被执行
i++;
}
解决这个问题的办法有两个:
1.把这个循环放到另外一个线程里面去,这样就不会阻止主线程了,不过这样是不能直接对label.Text赋值,需要使用Invoke方法,具体你可以查查MSDN
2. 就是像楼上那位,加一句Application.DoEvents();其实作用就是立刻执行用户事件,刷新界面。
你玩过游戏就知道,一般情况游戏界面很流畅,当遇到一些情况,比如说人物很多的时候,画面会很卡,就是因为界面上的操作太多了,阻止了界面的正常刷新动作,这就是所谓的丢帧,而像你举的例子,也是丢帧的情况,它丢带了9999帧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何防范通讯诈骗及飞车抢夺
述字换偏旁再组词
我家的藏獒眼睛长息肉了,医割需要花多少钱,
无氟冰箱有什么好处
求一首日文歌,应该是动漫ed,一个女生组合唱
怎么防止小虫进入吸顶灯
电脑开机到一半卡住,是什么原因?xp,有详细
如果你问一个男人舍得你吗,他回答是还好吧
一批零件有105个,已经加工完成了42个,剩下
比亚迪f3汽车熄火掉之后汽车仍然带电是怎么回
最早姚桥公房到沛县九路车几点钟
中国福利彩票(民主北路)地址在哪,我要去那里
彩票(国庆东路与建兴路交叉口西150米彩票)地
德国个人注册商标多少钱?
和女朋友分手后,为什么她不接受我的任何帮助
推荐资讯
UCC洗衣连锁店陵园路地址在什么地方,想过去
杞麓院美术工作室地址好找么,我有些事要过去
中国农业银行24小时自助银行(206国道)地址有
美阁儿地址在什么地方,我要处理点事
我们这里修火车站房子被占了要拆迁,因为我们
英德市沙口中学地址在什么地方,我要处理点事
商周时期,奴隶主强迫奴隶在田野上集体耕作。
用QQ聊天时,不显示我输入的内容,好友回答后
广东省和平农场社区管理委员会地址在什么地方
联拳的意思是什么啊?知道的请说下!
虾在玉雕作品中的精神
江景宾馆在什么地方啊,我要过去处理事情
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?