【问题标题】:Choosing a suitable loop [duplicate]选择合适的循环[重复]
【发布时间】:2017-11-20 19:44:39
【问题描述】:

让以下内容循环 1 小时并睡眠 5 分钟的最佳方法是什么?我尝试了一个使用秒表的循环,但在调试中尝试运行它时导致错误。

string message = txtmessage.Text;
Clipboard.SetText(message);
SendKeys.SendWait("x");
SendKeys.SendWait("^v");
SendKeys.SendWait("{ENTER}");

【问题讨论】:

  • 也许是一个计时器?请注意,这种类型的代码非常脆弱,并且可能不是执行您尝试执行的任何操作的正确方法。你想做什么?
  • 秒表不起作用,因为它是一种诊断措施。您可以使用 DateTime 对象来检查 TimeSpan 以查看 1 小时是否已过。每 1 小时或介于两者之间的 5 分钟睡眠时间?
  • 我需要程序来做一些用户会做的输入。在游戏中,它会按“x”打开聊天框,然后将一条消息粘贴到其中,用户将其放入文本框“txtmessage”并按回车键。我发现它不止一次这样做,我似乎无法在谷歌上找到解决方案。
  • 我查看了 datetime,它只是说明使用天而不是小时和分钟,你能提供一段代码吗?
  • @ConnorNee 看看here

标签: c# visual-studio-2015


【解决方案1】:

秒表不起作用,因为它是一种诊断措施。您可以使用 DateTime 对象来检查 TimeSpan 以查看 1 小时是否已过。每 1 小时或介于两者之间的 5 分钟睡眠时间?

你可以这样做:

var dateTime = DateTime.Now.AddMinutes(1);
Console.WriteLine($"It will stop at: {dateTime}");
var now = DateTime.Now;
while (dateTime.CompareTo(now) > 0)
{
   //Do Job
   now = DateTime.Now;
}

请注意,这是我能想到的最简单的方法。你可以改变它,让它变得更好。

编辑: 此版本的代码使用 Thread sleep 和 Timer 来完成您想要的工作。调用 Thread.Sleep 时要非常小心,因为如果应用程序的 ui 线程进入睡眠状态,您可能会冻结您的应用程序。

 Console.WriteLine($"Started at: {DateTime.Now}");
 Timer timer = new Timer(TimeSpan.FromSeconds(5).TotalMilliseconds) 
 {AutoReset = true};
 timer.Elapsed += (sender, args) =>
        {
            //Your code here.
        };
 timer.Start();

 Thread.Sleep(TimeSpan.FromMinutes(1));

 timer.Stop();

【讨论】:

  • 循环将运行 1 小时,但代码只能在 1 小时内每 5 分钟执行一次。
  • 有人知道这个错误是什么原因吗? pastebin.com/84T3Z6UM 指这个:pastebin.com/BKPftni9
  • 您的 OnTimedEvent 与我认为的签名不匹配。顺便检查一下我的最新编辑。我利用了@Media 所说的关于计时器的内容。
  • 顺便说一句,它有什么作用?我也得到了这个错误使用它gyazo.com/2a9f367757be5d729aaf5cf2a3c6eaaf
  • 在我的情况下,计时器将每 5 秒启动一次事件,每次达到其限制时都会重置。然后我使用 thread.Sleep 并在 x 分钟后停止计时器。 (此时我可以做一些清理工作。)编辑:对于您的错误链接,您能否提供引发异常的代码?
猜你喜欢
  • 2018-11-08
  • 2023-03-24
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2019-03-30
  • 2018-11-11
相关资源
最近更新 更多