private void pro(string url)
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
}
}上面的代码很简单,tsslStatus这是一个标签控件
代码实现的功能是随着i的增加,tsslstatus的控件文本内容动态替换,也就是我们会看到tsslstatus的文本内容从1一直变化到999
问题来了,我开发的是窗体程序,执行时总是看不到1到999的变化,看到的永远是只有999
如果说他的运行速度太快的话,我换成5000,也是一样的,总是看不到tsslstatus的文本变化.看到的只有执行完整个循环后的结果哪个高手帮忙解答一下
我用的是c#
谢谢
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
}
}上面的代码很简单,tsslStatus这是一个标签控件
代码实现的功能是随着i的增加,tsslstatus的控件文本内容动态替换,也就是我们会看到tsslstatus的文本内容从1一直变化到999
问题来了,我开发的是窗体程序,执行时总是看不到1到999的变化,看到的永远是只有999
如果说他的运行速度太快的话,我换成5000,也是一样的,总是看不到tsslstatus的文本变化.看到的只有执行完整个循环后的结果哪个高手帮忙解答一下
我用的是c#
谢谢
{
this.label1.Text = "0";
Thread thread_2 = new Thread(new ThreadStart(T2));
thread_2.Start();
}
public void T2()
{
try
{
MethodInvoker me = new MethodInvoker(T2_count_add);
for (int i = 0; i < 200; i++)
{
this.BeginInvoke(me);
Thread.Sleep(50);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "错误");
}
} public void T2_count_add()
{
this.label1.Text = (Int16.Parse(this.label1.Text.ToString()) + 1).ToString();
}
{
private int i = 0;
public Form1()
{
InitializeComponent();
this.timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Text = i.ToString();
if (++i >= 1000)
this.timer1.Stop();
}
}
拉个timer组件,
这段代码只是我的程序中的一小部分
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
Thread.Current.Sleep(500);
}
}
你的方法我试了一下,还是不行`
一样是执行完了才出现内容
private void pro(string url)
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text = i.ToString();
Application.DoEvents();
}
}
因为循环中,窗体WM_PAINT消息无法处理,所以要加上DoEvents()
private void pro(string url)
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text += i.ToString();
}
}要 += 啊
你只是 = 还不永远都只是999!
{
for (int i = 0; i < 1000; i++)
{
tsslStatus.Text += i.ToString();
}
}要 += 啊
你只是 = 还不永远都只是999!
呵呵
你没有理解我的意思,我的意思是说从状态标签的内容根据当前程序的处理情况显示出相关信息.当i为1时,该标签显示1,i为2时,标签则显示为二,依次类推
你的程序帅~
问题解决了
谢谢各位的帮忙再问一下,我的程序在执行的时候就好像挂掉了,等执行完了就会把所有的结果显示出来
有什么办法改善在执行的时候程序可以处理其他事务的功能呢?
至少不要像挂掉的一样
Application.DoEvents();
这句作用就是释放控制权,让程序可以处理其他事务。
你在循环里加入这句就行了。