c#.net 如何给一个Label控件的Text赋值并立即让它显示出来。
答案:7 悬赏:40 手机版
解决时间 2021-02-06 07:26
- 提问者网友:骑士
- 2021-02-05 11:18
c#.net 如何给一个Label控件的Text赋值并立即让它显示出来。
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-02-05 12:37
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++;
}
}
放到线程中去执行,不要把主线程阻塞了。你的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++;
}
}
全部回答
- 1楼网友:何以畏孤独
- 2021-02-05 18:41
在窗体中加个timer控件,在timer的tick事件里加上事件时间之间的间隔
- 2楼网友:旧脸谱
- 2021-02-05 17:28
this.Text1="这是一个Label";
this.show();
this.show();
- 3楼网友:十年萤火照君眠
- 2021-02-05 16:13
这应该是你直接在主线程中执行了该段代码的原因所致。要实现你的效果,将这段代码放到另一个线程中去。
- 4楼网友:一把行者刀
- 2021-02-05 15:25
使用的Label控件如果名称是label1,
那么可以这样写:
label1.text="abcdef"
label1.refresh()
那么可以这样写:
label1.text="abcdef"
label1.refresh()
- 5楼网友:风格不统一
- 2021-02-05 14:10
主线程长时间操作窗体,就会卡住,也就是你说的赋值不会立即显示出来,我教你一招。
int i = 0;
while (i <=10000)
{
label.Text = i;
Application.DoEvents();
i++;
}
加上中间的这句Application.DoEvents,就可以了。
int i = 0;
while (i <=10000)
{
label.Text = i;
Application.DoEvents();
i++;
}
加上中间的这句Application.DoEvents,就可以了。
- 6楼网友:山有枢
- 2021-02-05 13:34
我来告诉你为什么只有当整个循环结束了,才会显示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帧
并不是因为CPU速度太快的原因!就算CPU再慢,你也看不到0~9999这些数字
对于一个窗体程序来说,有一个主线程去维护整个界面的显示和刷新,你在这个主线程上面所做的操作是会阻止这个显示和刷新的动作的,即:
while (i <=10000)
{
label.Text = i;//当执行完这个语句的时候,虽然label.Text的值变成了i,但是它不会立刻刷新界面,因为你的循环还没结束,显示和刷新动作无法执行,只有当你的所有操作都结束了,显示和刷新才可能被执行
i++;
}
解决这个问题的办法有两个:
1.把这个循环放到另外一个线程里面去,这样就不会阻止主线程了,不过这样是不能直接对label.Text赋值,需要使用Invoke方法,具体你可以查查MSDN
2. 就是像楼上那位,加一句Application.DoEvents();其实作用就是立刻执行用户事件,刷新界面。
你玩过游戏就知道,一般情况游戏界面很流畅,当遇到一些情况,比如说人物很多的时候,画面会很卡,就是因为界面上的操作太多了,阻止了界面的正常刷新动作,这就是所谓的丢帧,而像你举的例子,也是丢帧的情况,它丢带了9999帧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯