现在的需求是,执行一段代码,其功能是一串模拟按键,其中除了按键外还要插入几个延迟,主要是为了等待操作界面响应。
例如:
SendKeys.Send("A");
SendKeys.Send("{Enter}");
延迟(2000);
SendKeys.Send("{Esc}");
延迟(1000);
SendKeys.Send("D");
SendKeys.Send("E");
现在的问题就是,假如延迟方法采用Sleep:
void 延迟(int ms)
{
Thread.Sleep(ms);
}
那么当前线程就被完全阻塞了,界面也就无法继续响应,等待半天都是白等,延迟后才继续执行所有界面响应,所以这样毫无意义。
我希望实现的效果是主线程转为空闲,让用户界面正常响应,延迟时间到了再继续执行下面的语句。
这样的话,多线程是可以实现的,但是又有一个问题,就是我不可能像最初那样写一行行的操作代码,中间穿插几个延迟函数调用,每次后续操作都只能依靠回调函数实现,假如我们的操作非常多,延迟也非常多,一个个回调嵌套回调,不仅难写,更难看,出了错也不好找啊。
不知道谁能用什么办法写出一个简单易用的延迟函数吗?就是这样的:
void 延迟(int ms)
{
…………
}
发送按键的操作不要在主线程完成,单独起一个工作线程来做这个工作,这样你就可以在工作线程中用Sleep延时了。
如果你一定要在主线程做这个工作,可以考虑用定时器来搞。
使用Doevents吧,这个应该可以实现你的要求,就是系统资源有点浪费