我在form上创建了两个label控件,现在想实现在label2控件上不停的刷新显示随机产生的数字。原理很简单,可是我碰到一些问题,请高手给分析下我错在哪里了?
程序如下:如果不用while (b){}可以显示数据,但是不能不停的刷新;我把while (b) {}加上之后就没有反应了,按F5之后连窗体都出不来了,请高手给分析下错在哪里了,谢谢!
private void Form1_Load(object sender, EventArgs e)
{ double vol;
bool b = true;
while (b)
{
Random V = new Random();
vol = V.Next(0, 300);
label2.Text = vol.ToString();
System.Threading.Thread.Sleep(100);
}
程序如下:如果不用while (b){}可以显示数据,但是不能不停的刷新;我把while (b) {}加上之后就没有反应了,按F5之后连窗体都出不来了,请高手给分析下错在哪里了,谢谢!
private void Form1_Load(object sender, EventArgs e)
{ double vol;
bool b = true;
while (b)
{
Random V = new Random();
vol = V.Next(0, 300);
label2.Text = vol.ToString();
System.Threading.Thread.Sleep(100);
}
解决方案 »
- Winform程序打包 ps:拒绝无脑打包……
- c# float 强制类型转换失败
- 自己设计的一个智力拼图游戏,欢迎指点
- c#编写图片切割程序的问题!QA
- 关于VS2005里面的是否存在Dataview控件以及如何用RowFilter属性
- 一个javascript问题
- 服务器无法访问应用程序目录“F:\sites\game\”。该目录不存在或因为安全设置而无法访问。
- 在C#中,如何设置系统托盘,按窗体最小化按钮时缩小到任务栏(托盘图标保留),按关闭按钮时缩小到托盘?
- 有什么简单的办法可以把int16转换为byte[2],int32转换为byte[4]?
- 一个关于使用.net中的EventLog的问题
- C# 调用PrintDocument如何不显示打印室的对话框
- 我用c#做的一个单子类,出了点问题
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(Run));
thread.Start();
} private void Run()
{
while (true)
{
Random rand = new Random();
this.label1.Text = rand.Next(0, 300).ToString();
Thread.Sleep(100);
}
}
{
Random V = new Random();
vol = V.Next(0, 300);
label2.Text = vol.ToString();
System.Threading.Thread.Sleep(100);
}//主线程一直阻在这里了。不能继续执行
{ double vol;
bool b = true;
while (b)
{
Application.DoEvents();
Random V = new Random();
vol = V.Next(0, 300);
label2.Text = vol.ToString();
System.Threading.Thread.Sleep(100);
}
感谢三楼的回答,我把你的代码运行了一下,出现了新的问题,下面是提示的错误:
未处理的“System.InvalidOperationException”类型的异常出现在 System.Windows.Forms.dll 中。
其他信息: 线程间操作无效: 从不是创建控件“label1”的线程访问它。这该怎么修改呢?还请高手指点一下
Control.CheckForIllegalCrossThreadCalls = false;
1.增加一个delegate void SetVisibleDelegate();2.新加一个函数privare void sinvoke(){this.Invoke(new SetVisibleDelegate(s))}3.之后重新调用private void showtable_btn_Click(object sender, EventArgs e){thread t = new thead(sinvoke)t.start()}