在特定时间间隔后执行代码,C#.NET
我正在尝试编写一个Windows窗体应用程序,该窗体应用程序在某些(非常规)时间间隔后向活动窗口发送不同的键。在特定时间间隔后执行代码,C#.NET
例如,按下按钮后,程序将等待3秒钟,然后向活动窗口发送“H”。再过1秒钟后,它发送一个“E”,并在接下来的秒钟后发送“Y”。
但当我尝试这个办法:
Thread.Sleep(3000);
SendKeys.Send("H");
Thread.Sleep(1000);
SendKeys.Send("E");
Thread.Sleep(1000);
SendKeys.Send("Y");
程序等待(至少)3秒,但似乎并没有发送下一个两个键间暂停。
我一直在尝试使用Timer来实现类似的功能,因为睡眠只保证延迟至少和给定的参数一样长,而且我需要更精确的东西。但是,我能够找到的唯一示例是在定期的时间间隔后执行代码。
有没有办法使用Timer来完成我尝试使用Sleep或更好的方法?
使用SendWait代替发送。
Thread.Sleep(3000);
SendKeys.SendWait("H");
Thread.Sleep(1000);
SendKeys.SendWait("E");
Thread.Sleep(1000);
SendKeys.SendWait("Y");
这似乎是伎俩。非常感谢。 – jbaby 2012-04-19 09:21:24
您的按钮事件处理程序和您的Thread.Sleep调用发生在同一个线程上。您的表单无法开始处理它收到的密钥,直到您的OnClick处理程序结束。
在你的Click处理程序:
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");}));
}
类似的东西应该让你开始。我是从头顶开始的,可能已经忘记了线程起始代码的细节
他正在向活动应用程序发送密钥,这不是他的形式。 – SimpleVar 2012-04-19 03:44:41
我想你可以重新定义计时器每次它触发以反映你的下一个时间间隔? – TGH 2012-04-19 03:28:23