c#.net 如何给一个Label控件的Text赋值并立即让它显示出来。
int i = 0;
while (i <=10000)
{
label.Text = i;
i++;
}
可能是cpu速度太快的问题,每次赋的值不会立即显示出来。只有当整个循环结束了,才会显示10000在label上。 展开
在窗体中加个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
并不是因为CPU速度太快的原因!就算CPU再慢,你也看不到0~9999这些数字
对于一个窗体程序来说,有一个主线程去维护整个界面的显示和刷新,你在这个主线程上面所做的操作是会阻止这个显示和刷新的动作的,即:
while (i <=10000)
{
label.Text = i;//当执行完这个语句的时候,虽然label.Text的值变成了i,但是它不会立刻刷新界面,因为你的循环还没结束,显示和刷新动作无法执行,只有当你的所有操作都结束了,显示和刷新才可能被执行
i++;
}
解决这个问题的办法有两个:
1.把这个循环放到另外一个线程里面去,这样就不会阻止主线程了,不过这样是不能直接对label.Text赋值,需要使用Invoke方法,具体你可以查查MSDN
2. 就是像楼上那位,加一句Application.DoEvents();其实作用就是立刻执行用户事件,刷新界面。
你玩过游戏就知道,一般情况游戏界面很流畅,当遇到一些情况,比如说人物很多的时候,画面会很卡,就是因为界面上的操作太多了,阻止了界面的正常刷新动作,这就是所谓的丢帧,而像你举的例子,也是丢帧的情况,它丢带了9999帧
放到线程中去执行,不要把主线程阻塞了。你的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++;
}
}
int i = 0;
while (i <=10000)
{
label.Text = i;
Application.DoEvents();
i++;
}
加上中间的这句Application.DoEvents,就可以了。
那么可以这样写:
label1.text="abcdef"
label1.refresh()