在特定的时间间隔后执行代码,C#.NET

在特定的时间间隔后执行代码,C#.NET,c#,.net,winforms,C#,.net,Winforms,我正在尝试编写一个Windows窗体应用程序,在特定(非常规)时间间隔后将不同的键发送到活动窗口 例如,按下按钮后,程序将等待3秒钟,然后向活动窗口发送“H”。再过一秒钟,它发送一个“E”,再过一秒钟,它发送一个“Y” 但当我尝试这个: Thread.Sleep(3000); SendKeys.Send("H"); Thread.Sleep(1000); SendKeys.Send("E"); Thread.Sleep(1000); SendKeys.Send("Y"); 程序等待(至少)3秒

我正在尝试编写一个Windows窗体应用程序,在特定(非常规)时间间隔后将不同的键发送到活动窗口

例如,按下按钮后,程序将等待3秒钟,然后向活动窗口发送“H”。再过一秒钟,它发送一个“E”,再过一秒钟,它发送一个“Y”

但当我尝试这个:

Thread.Sleep(3000);
SendKeys.Send("H");
Thread.Sleep(1000);
SendKeys.Send("E");
Thread.Sleep(1000);
SendKeys.Send("Y");
程序等待(至少)3秒钟,但在发送的下两个键之间似乎没有暂停

我一直在尝试使用计时器实现类似的东西,因为睡眠只能保证延迟至少与给定的参数一样长,而且我需要更精确的东西。然而,我能找到的唯一的例子是在一个固定的时间间隔后执行代码


有没有一种方法可以使用计时器来完成我尝试使用睡眠的任务,或者有一种更好的方法?

按钮事件处理程序和线程。睡眠调用发生在同一个线程上。在OnClick处理程序结束之前,表单无法开始处理收到的密钥

在单击处理程序中:

Thread t = new Thread(new ThreadStart(sendTheKeys));
t.start();
然后是发送密钥的方法

private void sendTheKeys()
{
    Thread.Sleep(3000);
    this.Invoke(new MethodInvoker(()=> {SendKeys.Send('H');}));
    Thread.Sleep(1000);

    this.Invoke(new MethodInvoker(()=>{SendKeys.Send("E");}));

    Thread.Sleep(1000);
    this.Invoke(new MethodInvoker(() => {SendKeys.Send("Y");}));
}

像这样的事情应该会让你开始。这是我一时兴起的想法,可能已经忘记了线程开始代码的细节

使用SendWait而不是Send

Thread.Sleep(3000);
SendKeys.SendWait("H");
Thread.Sleep(1000);
SendKeys.SendWait("E");
Thread.Sleep(1000);
SendKeys.SendWait("Y");

我想您可以在每次触发计时器时重新定义它,以反映您的下一个时间间隔?他正在向活动应用程序发送键,这不是他的表单。