发送延迟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是否已经启动,因为这样可以更好地处理以下情况:
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);