C# 使用C在循环中褪色#
我正在尝试将文本框的颜色更改为绿色,然后淡入白色作为确认方法。以下是我目前掌握的代码:C# 使用C在循环中褪色#,c#,loops,for-loop,colors,thread-sleep,C#,Loops,For Loop,Colors,Thread Sleep,我正在尝试将文本框的颜色更改为绿色,然后淡入白色作为确认方法。以下是我目前掌握的代码: private void btnCommit_Click(object sender, EventArgs e) { //do stuff Color c = new Color(); for (int i = 0; i <= 255; i++) { c = Color.FromArgb(i, 255, i); textBox1.Back
private void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
System.Threading.Thread.Sleep(10);
}
}
private void btnCommit\u单击(对象发送方,事件参数e)
{
//做事
颜色c=新颜色();
对于(int i=0;iThread.Sleep
阻止UI线程(如果像您的案例一样使用UI线程执行),您必须使用Task.Delay()
并使您的方法async
使UI响应并查看衰减动画:
private async void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
await Task.Delay(10);
}
}
private async void btnCommit\u单击(对象发送方,事件参数e)
{
//做事
颜色c=新颜色();
对于(int i=0;iThread.Sleep
阻止UI线程(如果像您的案例一样使用UI线程执行),您必须使用Task.Delay()
并使您的方法async
使UI响应并查看衰减动画:
private async void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
await Task.Delay(10);
}
}
private async void btnCommit\u单击(对象发送方,事件参数e)
{
//做事
颜色c=新颜色();
对于(int i=0;i)来说,每次迭代1000毫秒的等待将花费255秒,我认为OP不适合这样做。我没有注意到计数器是255,已修复。好吧,它可以工作,但这与DoEvents有相同的问题。代码重入。如果在执行循环时再次单击按钮,循环将再次启动(如果没有--do stuff--comment,这将是一个小问题)@Steve我认为在方法结束之前禁用按钮并启用它是一种解决方案。@fic任务。延迟
不是100%准确。对我来说,10ms
和1ms
之间的差异考虑到执行等待和恢复上下文所需的时间,使等待时间变得毫无意义或者1ms
1000毫秒的每次迭代等待将花费255秒,我认为OP不适合这样做。没有注意到计数器是255,已修复。好吧,它可以工作,但这与DoEvents有相同的问题。代码重入。如果在执行循环时再次单击按钮,循环将再次启动(如果没有--do stuff--comment,这将是一个小问题)@Steve我认为在方法结束之前禁用按钮并启用它是一种解决方案。@fic任务。延迟
不是100%准确。对我来说,10ms
和1ms
之间的差异考虑到执行等待和恢复上下文所需的时间,使等待时间变得毫无意义或者1ms
btnClick正在UI线程上执行,因此您会看到一个冻结。您可以使用WPF动画,也可以使用下面的anwer中所示的异步,或者在后台任务中运行此代码,该任务使用Dispatcher.BeginInvoke更新背景色。在哪个上下文中使用此命令?您是否考虑对此任务使用CSS或更少的命令?btnClick正在执行在UI线程上,因此您会看到冻结。您可以使用WPF动画,也可以使用下面的anwer中所示的异步,或者在后台任务中运行此代码,该任务使用Dispatcher.BeginInvoke更新背景色。这是在哪个上下文中使用的?您是否考虑过为该任务使用CSS或更少的CSS?