[英]how to call a method after every X minute for certain amount of time
我有2種方法。 第一種方法啟動一個.exe,第二種方法查找由該.exe創建的輸出文件。
調用.exe后,程序應開始尋找X分鍾(在app.config中定義)的輸出。
它應該調用該方法以查找輸出文件,在一定頻率(在app.config中定義)之后,它應該自行調用,如果找到返回成功,則查找輸出文件。如果錯誤進入睡眠,則跳出循環進入下一行。
重復步驟2,直到調用.exe為止,直到達到Y分鍾(在app.config中定義)為止。 如果超過,則停止返回失敗並轉到下一條語句。
我可以使用datetime.now
來獲取啟動.exe的時間,但無法弄清楚如何在其中添加X和Y分鍾以及如何使用這些時間限制。
到目前為止,這是我的代碼:
//Running the process .exe
DV.runprocess();
// check output file
String checkOutputFrequency=System.Configuration.ConfigurationManager.AppSettings["CheckOutputFrequency"].ToString();
decimal outfrequencyVal = (!string.IsNullOrEmpty(checkOutputFrequency)) ? Decimal.Parse(checkOutputFrequency) : 1;
bool FileFound = false;
while (true)
{
FileFound = DV.checkOutputFile();
if (FileFound == true)
break;
System.Threading.Thread.Sleep(Convert.ToInt32(outfrequencyVal * 60 * 1000));
}
創建一個新線程並傳遞開始時間。 睡眠X分鍾,然后使用循環代碼。 對於每個循環,檢查是否經過了開始時間加上Y分鍾
while (DateTime.Now < startTime.AddMinutes(Y)) {
//your codes...
}
另一種方法是async-await
public async Task RunAndListen()
{
DV.runprocess();
string checkOutputFrequency =
System.Configuration.ConfigurationManager.AppSettings["CheckOutputFrequency"].ToString();
decimal outfrequencyVal;
If (Decimal.TryParse(checkOutputFrequency, out outfrequencyVal) == false)
{
outfrequencyVal = 1;
}
var delayInMilliseconds = outfrequencyVal * 60 * 1000;
bool FileFound = DV.checkOutputFile();
while (FileFound == false)
{
await Task.Delay(delayInMilliseconds);
FileFound = DV.checkOutputFile();
}
}
行await Task.Delay(delayInMilliseconds);
將有效地將當前線程釋放回ThreadPool
並在給定時間過去后繼續執行下一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.