Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送延迟10秒的密钥-C#_C#_Sendkeys - Fatal编程技术网

发送延迟10秒的密钥-C#

发送延迟10秒的密钥-C#,c#,sendkeys,C#,Sendkeys,我需要在我的代码中设置SendKeys.Send的延迟。如何做到这一点 case "Open Google Chrome": System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe"); SendKeys.Send("{ENTER}"); break; 为什么我需要这个由于我的系统运行缓慢,Google Chrome启动大约需要10秒,因此本质上我需要将发送键的延迟设置为1

我需要在我的代码中设置
SendKeys.Send
的延迟。如何做到这一点

case "Open Google Chrome":
System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe");
SendKeys.Send("{ENTER}");
break;
为什么我需要这个由于我的系统运行缓慢,Google Chrome启动大约需要10秒,因此本质上我需要将
发送键的延迟设置为10秒,因为我希望在Google Chrome加载后按下该键。


请举个例子。谢谢。

在这两个动作之间睡觉

System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application");
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));
SendKeys.Send("{ENTER}");


(编辑:删除了评论中正确指出的CurrentThread引用)

一个简单的谷歌搜索就会出现:

System.Threading.Thread.Sleep(10000);
但请记住,更好的方法是每秒循环一次,检查Chrome是否已经启动,因为这样可以更好地处理以下情况:

  • Chrome的启动速度突然加快(这样你就不会不必要地等待了)
  • Chrome需要11秒才能启动一天(你的10秒延迟脚本失败得很惨)
  • 只用

    Thread.sleep(10000) 
    SendKeys.Send("{ENTER}";
    

    您可以使用10000,因为它以毫秒为单位

    您可以使用
    Thread.Sleep(10*1000)但这将使当前线程休眠10秒。如果你不想让当前线程进入睡眠状态,我建议你使用
    定时器

    var timer = new System.Threading.Timer((x) =>
    {
        SendKeys.Send("{ENTER}");
    }, null, 10000, Timeout.Infinite);
    

    这将在
    ThreadPool
    线程中执行,以防止当前线程阻塞。

    在启动时向Chrome发送Enter键的目的是什么?小心
    线程。睡眠
    ,就像在另一个系统上一样,甚至是在不同负载下的系统上。这可能不会在您预期的情况下触发。@Steve,我只是以它为例。:)好的,但我已经问过了,因为如果你需要在Chrome完全加载时强制它做一些事情,也许最好解释一下你的意图。可能存在其他方法(例如命令行)
    Sleep()
    是一种静态方法。您不必(也不应该)使用
    Thread
    的特定实例来使用它。@cdhowie:而且不能,除非在VB中。我看到oleksii也提到了这一点。“线程睡眠”到底是做什么的?使用计时器更好吗?
    线程。睡眠将使当前线程(正在执行的线程)阻塞最小给定毫秒数。在您的情况下,当前线程将至少休眠10秒。完全同意您的看法。但是,如果进程已经在任务管理器中启动,但还没有加载到屏幕上呢?@Mohammed,为什么您认为应用程序需要在消息泵运行之前显示一些内容?在任何情况下,您都可以等待窗口出现,而不是进程启动。我知道,这很晚,可能不会再使用了,但我确实同意paxdiablo,如果您关心窗口是否显示在屏幕上,而不是使用
    FindWindow(string lpszClass,string lpszWindow)改进您的应用程序
    [DllImport(“user32.dll”)]
    那里,您可以检查它是否在那里。
    var timer = new System.Threading.Timer((x) =>
    {
        SendKeys.Send("{ENTER}");
    }, null, 10000, Timeout.Infinite);