不停刷新控制内容,如何实现?

yilaozhuang 2010-01-25 09:32:54
小弟要实现一个功能:主窗体启动后,在label2上面不停的刷新随机数字,如何实现?我根据论坛里高手的指点,弄清楚了不同线程之间的控件调用,可以显示一个数据,但是不能不停的刷新显示。下面是代码:
namespace Meter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Control.CheckForIllegalCrossThreadCalls = false;
}

private void Form1_Load(object sender, EventArgs e)
{
Thread display = new Thread(temp);
display.Start();

}

private void Run()
{
for (int i = 0; i < 10;i++ )
{
Random rand = new Random();
string ss = rand.Next(0, 300).ToString();
label2.Text = ss;
Thread.Sleep(100);
}
}

delegate void D();
private void temp()
{
this.Invoke(new D(Run));
}

}
}

如果利用//Control.CheckForIllegalCrossThreadCalls = false; 这种方法可以实现不停的刷新数据,但是看网上说这个方法有很大的潜在危险,怕后面出问题,不敢用这个。请高手指点一下该怎么修改,谢谢
...全文
76 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilaozhuang 2010-01-28
  • 打赏
  • 举报
回复
7楼好搞笑啊,大家都在说的c#,你咋搞成了VB呢
lbkmaster 2010-01-25
  • 打赏
  • 举报
回复
Private Sub SetStart
Dim mythearth As New Thread(New ThreadStart(AddressOf setlabel))
mythearth.Start()
End Sub


Private Sub setlabel()
Label2.Invoke(New EventHandler(AddressOf setlabel2))

End Sub
Private Sub setlabel2()
Label2.Text = "ddd"
Thread.Sleep(1000)
End Sub



结贴吧
zhukui 2010-01-25
  • 打赏
  • 举报
回复
将Thread.Sleep(100);
替换成Application.DoEvents()
lbkmaster 2010-01-25
  • 打赏
  • 举报
回复
不能用Timer,不好控件。使用THIS委托 更改LABLE.TEXT 或者使用线程线启动THIS委托。然后LABLE.TXT="XX"
再刷新LABLE
使用SLEEP 停止线程,即可,我的就是这样做的
Valefish 2010-01-25
  • 打赏
  • 举报
回复
Timer啊 好东西啊
Ny-6000 2010-01-25
  • 打赏
  • 举报
回复
对极啦。
qqiuzaihui 2010-01-25
  • 打赏
  • 举报
回复
label2.Text = ss;
设置了之后: label2.Refresh(); 一下就行了.
wuyq11 2010-01-25
  • 打赏
  • 举报
回复
通过Timer不断刷新
Application.DoEvents();

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧