日期:2014-05-17  浏览次数:21294 次

C# 窗口刷新太快 导致控件无效
我现在有一个窗口,这个窗口内的数据在不断的刷新,刷新的速度是1ms一次(很快); 然后我在这个窗口上放了2个按钮; 
  
我的问题来了,当我把窗口打开,让这个窗口开始1ms刷新一次数据的时候,我发现窗口上的其他控件全都“无效了”,只要点击二个按钮中的任意一个,窗口就会死掉(未响应),本来刷新的数据也不刷新了,窗口“死掉”了;

但是如果不点这些按钮,窗口就一直可以正常刷新(没死掉);

请问这是为什么? 

是窗口的重画太快了,导致其他控件无法使用吗

------解决方案--------------------
刷新太快,获取数据太慢,放到异步执行,timer是会阻塞主线程的
------解决方案--------------------
多线程示例:
C# code

 Thread th = new Thread((ThreadStart)delegate()
            {
                test();
            });
            th.Start();
 public void test()
        {
            int i=0;
            while (i<100000)
            {
                this.Invoke
                    (
                    (MethodInvoker)delegate()
                    {
                        label1.Text = i.ToString();
                    }
                    );
                i += 100;
            }
        }

------解决方案--------------------
public partial class Form1 : Form
{
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;
}


}