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

比如。inti=0;while(i<=10000){label.Text=i;i++;}可能是cpu速度太快的问题,每次赋的值不会立即显示出来。只有当整个循环结束了,才会... 比如。
int i = 0;
while (i <=10000)
{
label.Text = i;
i++;
}

可能是cpu速度太快的问题,每次赋的值不会立即显示出来。只有当整个循环结束了,才会显示10000在label上。
展开
 我来答
帐号已注销
2020-05-18 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:156万
展开全部

在窗体中加个timer控件,在timer的tick事件里加上事件时间之间的间隔。

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++;

}

}

扩展资料:

在新类型中只能有字段成员,而且这些字段的类型也是通过初值的类型推断出来的。如果在声明新的匿名类型时,新类型的字段名、顺序以及初始值的类型是一致的,那么将会产生相同的匿名类型,所以上例中anonymousType1和anonymousType2的类型是相同的,自然能进行anonymousType2=anonymousType1的赋值。

这个特性是对隐式类型化本地变量的扩展,有了这个特性,将使我们创建数组的工作变得简单。我们可以直接使用"new[]"关键字来声明数组,后面跟上数组的初始值列表。在这里,我们并没有直接指定数组的类型,数组的类型是由初始化列表推断出来的。

参考资料来源:百度百科-C#.net

rightmin
推荐于2017-09-03 · TA获得超过4124个赞
知道大有可为答主
回答量:2199
采纳率:0%
帮助的人:1771万
展开全部
我来告诉你为什么只有当整个循环结束了,才会显示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帧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianlidon
推荐于2017-09-13 · TA获得超过1219个赞
知道小有建树答主
回答量:676
采纳率:85%
帮助的人:102万
展开全部
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++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
styshoo1986
2012-04-21 · TA获得超过893个赞
知道小有建树答主
回答量:832
采纳率:100%
帮助的人:252万
展开全部
主线程长时间操作窗体,就会卡住,也就是你说的赋值不会立即显示出来,我教你一招。
int i = 0;
while (i <=10000)
{
label.Text = i;
Application.DoEvents();
i++;
}

加上中间的这句Application.DoEvents,就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sbj518
2015-05-27 · TA获得超过4.4万个赞
知道大有可为答主
回答量:1.1万
采纳率:81%
帮助的人:5132万
展开全部
使用的Label控件如果名称是label1,
那么可以这样写:
label1.text="abcdef"
label1.refresh()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式