我现在有一个窗口,这个窗口内的数据在不断的刷新,刷新的速度是1ms一次(很快); 然后我在这个窗口上放了2个按钮;
我的问题来了,当我把窗口打开,让这个窗口开始1ms刷新一次数据的时候,我发现窗口上的其他控件全都“无效了”,只要点击二个按钮中的任意一个,窗口就会死掉(未响应),本来刷新的数据也不刷新了,窗口“死掉”了;但是如果不点这些按钮,窗口就一直可以正常刷新(没死掉);请问这是为什么? 是窗口的重画太快了,导致其他控件无法使用吗?
我的问题来了,当我把窗口打开,让这个窗口开始1ms刷新一次数据的时候,我发现窗口上的其他控件全都“无效了”,只要点击二个按钮中的任意一个,窗口就会死掉(未响应),本来刷新的数据也不刷新了,窗口“死掉”了;但是如果不点这些按钮,窗口就一直可以正常刷新(没死掉);请问这是为什么? 是窗口的重画太快了,导致其他控件无法使用吗?
{
test();
});
th.Start();
public void test()
{
int i=0;
while (i<100000)
{
this.Invoke
(
(MethodInvoker)delegate()
{
label1.Text = i.ToString();
}
);
i += 100;
}
}
{
public Form1()
{
InitializeComponent();
}
int number = 0; private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
} private void timer1_Tick(object sender, EventArgs e)
{
button1.Text = "按钮" + number;
number++;
} private void button2_Click(object sender, EventArgs e)
{
Thread th = new Thread(delegate()
{
NewMethod();
});
th.Start();
} private static void NewMethod()
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine(i);
}
} private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Timers;namespace WindowsApplication1
{
public partial class Form1 : Form
{ int number = 0;
private System.Timers.Timer timer = new System.Timers.Timer(1); public Form1()
{
InitializeComponent();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
}
private void Form1_Load(object sender, EventArgs e)
{
timer.Enabled = true;
} void timer_Elapsed(object sender, ElapsedEventArgs e)
{
this.Invoke((EventHandler)delegate
{
button1.Text = "按钮" + number;
});
number++;
Thread.Sleep(1000);
} private void button2_Click(object sender, EventArgs e)
{
Thread th = new Thread(delegate()
{
NewMethod();
});
th.Start(); } private static void NewMethod()
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine(i);
}
} }
}创建一个窗体,拖2个button上去。button2分别注册对应的button2_Click(object sender, EventArgs e)事件!运行后点击button1看看。timer每1毫秒更新数据的同事阻塞线程1000毫秒,点击button2看看,会不会假死!~