我有几周前写的应用程序,当您单击列表中的PC名称时,该应用程序会自动连接到我们网络上的特定PC。该过程涉及将PC的名称和默认密码输入VNC并按Enter键进行连接。它在一台PC上完美运行,但在另一台PC上运行或错过。我确信我可以使用不同的方法重做自动化,但我喜欢它的方式是多么简单,这是:
string x86Path = "C:\\Program Files (x86)\\uvnc bvba\\UltraVNC\\vncviewer.exe";
try
{
startVNC.StartInfo.FileName = x86Path;
if (startVNC.Start())
{
startVNC.WaitForInputIdle();
SendKeys.Send(pcName);
SendKeys.Send("{ENTER}");
startVNC.WaitForInputIdle();
SendKeys.Send("apassword");
SendKeys.Send("{ENTER}");
}
}
当VNC启动时,它等待输入(首先是PC名称),然后发送ENTER键。然后它再次等待输入(这次它是apassword),然后发送ENTER键。这将在90%的时间内成功连接到PC。但有时它会挂起,密码不会自动提交。有一个更好的方法吗?这是一种非常不正确的方式来实现WaitForInputIdle()吗?
答案 0 :(得分:0)
https://msdn.microsoft.com/en-us/library/0yd65esw.aspx 使用catch子句来处理错误。
如果没有输入密码,你可以使用类似catch的东西;如果仍然等待再次输入密码,你可以使用catch。只要是可预测的错误,任何捕获都是好的。这可以保持简单。
你也可以分开2 startVNC.WaitForInputIdle();所以密码输入是基于如果pc名称输入工作,因为它的bool你可以使用第一个有效的等待开始下一个不那么简单。
https://msdn.microsoft.com/en-us/library/hh194873(v=vs.110).aspx for Task.Delay方法。
如果它是可预测的时间量,你也可以使用延迟而不是等待。假设(2000)的延迟是2秒这是相同大小的代码但不是那么简单,因为你仍然有原始的等待,但现在而不是第二次等待你有一个延迟任务。希望这有助于我回答问题,因此我添加了对catch和delay的引用,而不是建议直接更改。