繁体   English   中英

C#Thread.Sleep()导致滞后

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM