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();
        }
    }
}