延迟执行某个动作一段时间

5
我目前正在开发一个屏幕保护程序的启动程序,但是我想要延迟一段时间才启动屏幕保护,以确保鼠标位置仍在激活屏幕保护的位置上,从而防止意外启动。我考虑使用某种线程,在执行之前检查鼠标位置x秒钟,这样做是否合理?

我不是在编写屏幕保护程序,我编写的是一个应用程序,当您将鼠标移动到桌面的指定角落时,会启动屏幕保护... 我想知道如何在将鼠标移动到该角落时添加延迟,以防止意外启动屏幕保护

如果可以,怎么做?

有一个API可以管理屏幕保护程序。你是在说那个吗? - H H
使用低级别鼠标钩子编写自己的“热角”类型应用程序。我已经将所有内容都搞定了,只是在寻找一种延迟启动屏幕保护程序的方法,一旦鼠标进入“激活区域”。 - CybrHwk
2
一个关注鼠标位置的屏幕保护程序毫无意义。它不应该在人类移动鼠标时激活。需要仔细考虑这一点。 - Hans Passant
我认为你们都误解了我的意思。我不是在编写屏幕保护程序,而是已经编写了一个应用程序,当你将鼠标移动到桌面的指定角落时,屏幕保护程序会启动... 我想知道如何添加延迟时间,以防止意外启动屏幕保护程序。 - CybrHwk
2个回答

4

这样,当您将鼠标移动到桌面的指定角落时,屏幕保护程序就会开启...

当鼠标到达那里时,设置一个布尔值和一个计时器。使任何鼠标动作都清除该布尔值。
只有当计时器触发且您的标志仍然存在时才进行下一步操作。

换句话说,使用一个小状态机。


采用了这个解决方案,非常有效,感谢您的帮助 :) - CybrHwk

0

这是伪代码

   var CurrentMouse = ...; // Get mouse coordinates.
   ThreadPool.QueueUserWorkItem(        
   (s) => {
            Thread.Sleep(500); // Half a second

        //  if (Mouse did not move)
        //     Launch Screen Saver

   });

编辑: 请注意,这并不涉及调用 GUI 层或线程锁定。请参阅我的博客文章C# MultiThreading Using ThreadPool, Anonymous Delegates and Locks,该文章展示了正确的锁定。


另一个与主题不太相关的答案,其中包含指向您博客的链接。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接