2017-06-18 112 views
0

什麼是最好的方式讓以下成爲一個循環1小時,並有5分鐘的睡眠?我嘗試了一個使用秒錶的循環,但是在嘗試在調試中運行時導致錯誤。選擇合適的循環

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

也許是一個計時器?請注意,這種類型的代碼非常脆弱,可能不是您嘗試執行任何操作的正確方法。你想要做什麼? –

+0

秒錶沒有工作,因爲它是一種診斷措施。您可以使用DateTime對象來檢查TimeSpan以查看是否有1小時已經過去。 5分鐘的睡眠每隔1小時還是在兩者之間? –

+0

我需要程序做一些用戶會做的輸入。在遊戲中,它會按下'x'來打開聊天框,然後將一條消息粘貼到該消息中,用戶將其放入文本框'txtmessage'並點擊輸入。我發現它不止一次,我似乎無法在google上找到解決方案。 –

回答

1

StopWatch沒有工作,因爲它是一種診斷措施。您可以使用DateTime對象來檢查TimeSpan以查看是否有1小時已經過去。 5分鐘的睡眠每隔1小時還是在兩者之間?

你可以這樣說:

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時要非常小心,因爲如果你的應用程序進入睡眠應用程序的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(); 
+0

循環將運行1小時,但代碼只應在該1小時內每5分鐘執行一次。 –

+0

任何人都知道這個錯誤是什麼? https://pastebin.com/84T3Z6UM 參照此:https://pastebin.com/BKPftni9 –

+0

您的OnTimedEvent與我認爲的簽名不符。順便檢查我最新的編輯。我利用@Media關於計時器的說法。 –