[英]C# Thread.Sleep() cause lag
好的,我在C#中有问题。 在我的脚本Threading.Sleep()中导致延迟,我认为我做错了什么,这是源代码的一部分:
case 2:
{
mouse_event(MOUSEEVENTF_LEFTDOWN, Pos.X, Pos.Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, Pos.X, Pos.Y, 0, 0);
SendKeys.Send(textBox1.Text);
Thread.Sleep(300);
SendKeys.Send("{ENTER}");
break;
}
我想发送文本,等待300毫秒并发送回车,但是我只是在这段时间内收到延迟,一切都在不等待的情况下完成。 也许还有其他选择吗?
滞后是什么意思? 在这种情况下,没有太多上下文,就好像您正在阻塞主线程,然后它在Sleep()
期间锁定了您的应用程序。 您还说过要休眠300毫秒,但已将1000传递给该函数。 使用诸如BackgroundWorker
类的东西将发送文本的逻辑放在后台线程中,这样您就不会在发生UI时阻止它。
滞后是什么意思? 我猜这是您如何描述代码花在睡眠上的时间。
也许您可能想看一下Timer类[0],然后可以将以后的代码绑定为一个事件。
[0]此处描述了三个计时器类: http : //msdn.microsoft.com/zh-cn/magazine/cc164015.aspx 。 我倾向于使用System.Timers.Timer类。
编辑以回应评论:
您需要考虑“什么都不做”的含义。 不执行任何操作都包括不更新UI或执行任何操作。 从字面上看无能为力。 我假设这就是您所描述的滞后。 为了解决这个问题,在两个答案中描述了两种方法。 两者最终都涉及使用线程,以便主线程可以继续使UI功能可以发生,而辅助线程可以工作。
我的方法将涉及一个计时器。 当您希望程序停止一会儿时,您将创建一个带有事件的计时器,该事件将在暂停结束时触发。 然后,该事件将在该时间结束时调用您要运行的方法。 这可能需要对代码进行一些重构。
另一种方法涉及产生一个单独的代码,其他代码可以在该代码中运行。因为这是第二线程休眠,因此不会影响应用程序其余部分的响应性,仅影响那个线程的响应性,因此无关紧要。 这很可能是做事的最简单方法。
可以肯定的是,如果您不太熟悉或不熟悉一个应用程序中多个线程的工作方式,那么您可能首先需要进行一些常规阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.