C# 延迟更改几个文本框的颜色
我想以一定的延迟更改多个文本框的颜色。但目前的代码使这成为总延迟C# 延迟更改几个文本框的颜色,c#,uwp,C#,Uwp,我想以一定的延迟更改多个文本框的颜色。但目前的代码使这成为总延迟 private void Button_Click(object sender, RoutedEventArgs e) { System.Threading.Tasks.Task.Delay(25).Wait(); EMS.Background = RED; System.Threading.Tasks.Task.Delay(50).Wait(); XMS.Backg
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Threading.Tasks.Task.Delay(25).Wait();
EMS.Background = RED;
System.Threading.Tasks.Task.Delay(50).Wait();
XMS.Background = RED;
System.Threading.Tasks.Task.Delay(50).Wait();
XSMS.Background = RED;
System.Threading.Tasks.Task.Delay(2000).Wait();
}
尝试将您的方法设置为
async
,并使用wait Task.Delay()
:
您的问题基本上是因为您在执行每个
任务后执行的.Wait()
。如果您只让每个任务运行,就可以了
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Anything
{
public class Program
{
public static void Main(string[] args)
{
var dict = new Dictionary<TextBox, int>
{
[new TextBox {Top = 25}] = 250,
[new TextBox {Top = 50}] = 500,
[new TextBox {Top = 75}] = 750,
[new TextBox {Top = 100}] = 2000
};
var form = new Form();
var button = new Button {Text = "Click Me"};
button.Click += (o, e) =>
{
foreach (var item in dict)
{
Task
.Delay(TimeSpan.FromMilliseconds(item.Value))
.ContinueWith(_ => item.Key.BackColor = Color.Red);
}
};
form.Controls.Add(button);
form.Controls.AddRange(dict.Keys.OfType<Control>().ToArray());
form.ShowDialog();
Console.ReadKey();
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统图;
使用System.Linq;
使用System.Threading.Tasks;
使用System.Windows.Forms;
名称空间任何东西
{
公共课程
{
公共静态void Main(字符串[]args)
{
var dict=新字典
{
[新文本框{Top=25}]=250,
[新文本框{Top=50}]=500,
[新文本框{Top=75}]=750,
[新文本框{Top=100}]=2000
};
var form=new form();
var button=新建按钮{Text=“单击我”};
按钮。单击+=(o,e)=>
{
foreach(dict中的var项目)
{
任务
.Delay(TimeSpan.From毫秒(项值))
.ContinueWith(=>item.Key.BackColor=Color.Red);
}
};
窗体.控件.添加(按钮);
AddRange(dict.Keys.OfType().ToArray());
form.ShowDialog();
Console.ReadKey();
}
}
}
您可以在纯WPF中实现这一点,无需单击按钮。查看如何使用System.Windows.Forms.Timer?
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Anything
{
public class Program
{
public static void Main(string[] args)
{
var dict = new Dictionary<TextBox, int>
{
[new TextBox {Top = 25}] = 250,
[new TextBox {Top = 50}] = 500,
[new TextBox {Top = 75}] = 750,
[new TextBox {Top = 100}] = 2000
};
var form = new Form();
var button = new Button {Text = "Click Me"};
button.Click += (o, e) =>
{
foreach (var item in dict)
{
Task
.Delay(TimeSpan.FromMilliseconds(item.Value))
.ContinueWith(_ => item.Key.BackColor = Color.Red);
}
};
form.Controls.Add(button);
form.Controls.AddRange(dict.Keys.OfType<Control>().ToArray());
form.ShowDialog();
Console.ReadKey();
}
}
}