label动态显示循环条数? label1.Text += i.ToString(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ps:这样只会直接显示0123456789要人肉眼可辨的0-->1-->2这样加上去,你得用backgroundworker 因为程序运行太快了,你看不到你在循环里价格Thread.Sleep(1000); 这样写的,也不会显示for (int i = 0; i < 100; i++) { label1.Text = i.ToString(); Thread.Sleep(1000); } 加sleep,阻塞了,不会显示要么放timer里去,每秒+1,然后显示要么放线程里 public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } Thread drawThread = null; private void button1_Click(object sender, EventArgs e) { closeThread(); drawThread = new Thread(new ThreadStart(draw)); drawThread.IsBackground = true; drawThread.Start(); } private void draw() { try { for (int i = 0; i < 10; i++) { label1.Text = i.ToString(); Thread.Sleep(1000); } } catch (System.Exception ex) { MessageBox.Show("error"); } closeThread(); } //结束子线程 private void closeThread() { if (drawThread != null) { if (drawThread.IsAlive) { drawThread.Abort(); } } }起一个线程就好了 这样写的,也不会显示for (int i = 0; i < 100; i++) { label1.Text = i.ToString(); Thread.Sleep(1000); }三楼说得没错,是运行得太快了,肉眼没法观察 for (int i = 0; i < 100; i++) { Thread.Sleep(1000); Application.DoEvents(); label1.Text = i.ToString(); }改变label1的文本会触发事件重绘Text,因为循环去改变所以程序已经帮你优化了不再执行触发事件重绘Text,也就是你说的显示不出来,加上Application.DoEvents();会让它继续执行触发事件,这时你就能看见了注意使用DoEvents()会出现哪些问题,自己查看相关资料 就是想做一个简单的显示,现在循环到第几条数据了还是进度啊,这是没有“条”了,亲,不带这么玩的。要找 BackgroundWorker 帮忙哦! 用timer控件。一个timer控件+一个label控件using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace gundong_Label{ public partial class Form1 : Form { public Form1() { InitializeComponent(); button2.Enabled = false; } private void timer1_Tick(object sender, EventArgs e) { label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离 if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时 { label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度 } } //开始演示 private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; //开始滚动 button2.Enabled = true; } //单击暂停按钮 private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false; //停止滚动 button2.Enabled = false; } //退出 private void button3_Click(object sender, EventArgs e) { this.Close(); } }} 哦哦,不好意思,原来代码是不能附加样式的,本来想给这段关键代码加红色的哈, private void timer1_Tick(object sender, EventArgs e) { label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离 if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时 { label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度 } } 就是想做一个简单的显示,现在循环到第几条数据了还是进度啊,这是没有“条”了,亲,不带这么玩的。要找 BackgroundWorker 帮忙哦! for (int i = 0; i < 10; i++) { i1=i; //前面定义了一个全局的i1 backgroundWorker1.RunWorkerAsync(); }private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { label1.Text .Text =ToString(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //这个地方不知道怎么写了 } 就是想做一个简单的显示,现在循环到第几条数据了还是进度啊,这是没有“条”了,亲,不带这么玩的。要找 BackgroundWorker 帮忙哦! for (int i = 0; i < 10; i++) { i1=i; //前面定义了一个全局的i1 backgroundWorker1.RunWorkerAsync(); }private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { label1.Text=i1.ToString(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //这个地方不知道怎么写了 }这个要怎样写代码? backgroundworker_dowork中要做的就是需要循环处理的代码。backgroundWorker1_RunWorkerCompleted是后台线程结束后,需要做的处理。 运行太快了,你看不到,用timer控件,在timer事件中添加 给label赋值;设置 timer的间隔事件;要么在原有for循环中添加threed.sleep(5000);//单位毫秒 并不是运行太快,是因为for (int i = 0; i < 10; i++) { label1.Text = i.ToString(); }这段代码,会阻塞UI线程直到执行完毕才会刷新UI,如果是winform 可以用Application.Doevents()方法。或者采用子线程,或者用Timer,总之 都能解决。for (int i = 0; i < 10; i++) { label1.Text = i.ToString(); Application.Doevents(); } 就是想做一个简单的显示,现在循环到第几条数据了还是进度啊,这是没有“条”了,亲,不带这么玩的。要找 BackgroundWorker 帮忙哦! for (int i = 0; i < 10; i++) { i1=i; //前面定义了一个全局的i1 backgroundWorker1.RunWorkerAsync(); }private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { label1.Text=i1.ToString(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //这个地方不知道怎么写了 }这个要怎样写代码?是WinForm吗,是的话直接强制lab重绘就行了,用LaB_1.Refresh();就可以了.... .Net 4.0最简单了。 Task.Factory.StartNew(() => {for (int i = 0; i < 10000000; i++) { this.Dispatcher.Invoke(new Action(() => { label1.Text = i.ToString(); })); }}); 循环显示1~100数字例子class program{ static void Main()//入口方法 { for (int i = 1; i <= 100; i++)//开始for循环 { System.Console.WriteLine(i);//输出i的值 } System.Console.ReadLine();//等待回车继续 }}//输出1~100数字 使用sqlite的程序,怎么根据系统动态调用64位或者32位的dll 求助:两块声卡同时录音怎祥实现? string byte 问题 如何控制网页上的单选按钮 在textBox中如何取到光标在Text值字符的位置.需要得到一个可用的值. winform求助!! C#子窗体获取父窗体自定义控件里的信息 C# mysql 因为某个字出错…… 难,初学c#如何将一个文本文件里面的一句话替换为另外一句话,然后能恢复原来状态 请问高手,如何使得textbox在WindowForm下可以透明或是半透明? c# winform 怎么利用Main()传值 C# 关于if语句中的条件判断问题
要人肉眼可辨的0-->1-->2这样加上去,你得用backgroundworker
你在循环里价格Thread.Sleep(1000);
这样写的,也不会显示
for (int i = 0; i < 100; i++)
{
label1.Text = i.ToString();
Thread.Sleep(1000);
}
要么放timer里去,每秒+1,然后显示
要么放线程里
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
} Thread drawThread = null; private void button1_Click(object sender, EventArgs e)
{
closeThread();
drawThread = new Thread(new ThreadStart(draw));
drawThread.IsBackground = true;
drawThread.Start();
} private void draw()
{
try
{
for (int i = 0; i < 10; i++)
{
label1.Text = i.ToString();
Thread.Sleep(1000);
}
}
catch (System.Exception ex)
{
MessageBox.Show("error");
}
closeThread();
} //结束子线程
private void closeThread()
{
if (drawThread != null)
{
if (drawThread.IsAlive)
{
drawThread.Abort();
}
}
}起一个线程就好了
这样写的,也不会显示
for (int i = 0; i < 100; i++)
{
label1.Text = i.ToString();
Thread.Sleep(1000);
}三楼说得没错,是运行得太快了,肉眼没法观察
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
Application.DoEvents();
label1.Text = i.ToString();
}
改变label1的文本会触发事件重绘Text,因为循环去改变所以程序已经帮你优化了不再执行触发事件重绘Text,也就是你说的显示不出来,加上Application.DoEvents();会让它继续执行触发事件,这时你就能看见了注意使用DoEvents()会出现哪些问题,自己查看相关资料
一个timer控件+一个label控件using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace gundong_Label
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button2.Enabled = false;
} private void timer1_Tick(object sender, EventArgs e)
{
label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离
if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时
{
label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度
}
}
//开始演示
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //开始滚动
button2.Enabled = true;
}
//单击暂停按钮
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false; //停止滚动
button2.Enabled = false;
}
//退出
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离
if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时
{
label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度
}
}
for (int i = 0; i < 10; i++)
{
i1=i; //前面定义了一个全局的i1
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text .Text =ToString();
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//这个地方不知道怎么写了
}
for (int i = 0; i < 10; i++)
{
i1=i; //前面定义了一个全局的i1
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text=i1.ToString();
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//这个地方不知道怎么写了
}
这个要怎样写代码?
backgroundWorker1_RunWorkerCompleted是后台线程结束后,需要做的处理。
用timer控件,
在timer事件中添加 给label赋值;
设置 timer的间隔事件;要么在原有for循环中添加threed.sleep(5000);//单位毫秒
{
label1.Text = i.ToString();
}这段代码,会阻塞UI线程直到执行完毕才会刷新UI,如果是winform 可以用Application.Doevents()方法。或者采用子线程,或者用Timer,总之 都能解决。
for (int i = 0; i < 10; i++)
{
label1.Text = i.ToString();
Application.Doevents();
}
for (int i = 0; i < 10; i++)
{
i1=i; //前面定义了一个全局的i1
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text=i1.ToString();
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//这个地方不知道怎么写了
}
这个要怎样写代码?
是WinForm吗,是的话直接强制lab重绘就行了,用LaB_1.Refresh();就可以了....
{
this.Dispatcher.Invoke(new Action(() =>
{
label1.Text = i.ToString();
}));
}
});
class program
{
static void Main()//入口方法
{
for (int i = 1; i <= 100; i++)//开始for循环
{
System.Console.WriteLine(i);//输出i的值
}
System.Console.ReadLine();//等待回车继续
}
}//输出1~100数字