使用Thread.Sleep()显示慢速模拟

时间:2016-08-30 13:05:05

标签: c# multithreading

lbl1.BackColor = Color.Red;    //change backcolors of labels
lbl2.BackColor = Color.Red;
Thread.Sleep(2000);

lbl1.Text = val1.ToString(); //assign values to labels
lbl2.Text = val2.ToString();
Thread.Sleep(2000);

lbl1.BackColor = Color.Green; //reassign original backcolors
lbl2.BackColor = Color.Green;

这是在递归方法中调用的方法的一部分。我想分解这些步骤以显示慢速模拟。但是,这并没有给出预期的输出。

有更好的方法吗?请建议。

1 个答案:

答案 0 :(得分:4)

不要使用Thread.Sleep()来冻结用户界面,而是可以通过实施自己的异步方法来完成同样的工作。

您也可以使用Timers来实现相同目标。

这是关于如何异步管理任务的示例。 假设这是我的方法Perform()

private async Task Perform()
{
    lbl1.BackColor = Color.Red;    
    lbl2.BackColor = Color.Red;
    await Task.Delay(2000);

    lbl1.Text = val1.ToString();  
    lbl2.Text = val2.ToString();
    await Task.Delay(2000);

    lbl1.BackColor = Color.LightSeaGreen;  //changed to lightseagreen as the green you used
    lbl2.BackColor = Color.LightSeaGreen;  //was hurting my eyes :P
}

我在事件中称之为button_click事件。

private void button1_Click(object sender, EventArgs e)
{
    Task t = Perform();
}

输出如下:

async click

详细了解如何使用 async and await