新建窗体
1 放一个按钮button事件如下,界面卡死
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
while (true)
{
Thread.Sleep(20);
i++;
if (i > 8000) return;
}
}
2 增加Application.DoEvents();,界面卡消失
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
while (true)
{
Thread.Sleep(20);
Application.DoEvents();
i++;
if (i > 8000) return;
}
}
3 使用线程调用等待函数,虽然有Application.DoEvents();,使用task.wait依然界面卡死
public void Waits()
{
int i = 0;
while (true)
{
Thread.Sleep(20);
Application.DoEvents();
i++;
if (i > 8000) return;
}
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
Task yy = new Task (() => { Waits(); });
yy.Start();
yy.Wait();
button1.Enabled = true;
}
4 使用异步线程操作,卡消失
public void Waits()
{
int i = 0;
while (true)
{
Thread.Sleep(20);
Application.DoEvents();
i++;
if (i > 8000) return;
}
}
private async void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
Task<int> yy = new Task<int>(() => { Waits(); return 0; });
yy.Start();
await yy;
button1.Enabled = true;
}