【发布时间】:2017-05-10 13:57:13
【问题描述】:
我正在制作一个项目,它将使应用程序运行数小时,每 2 分钟检查一次值。问题是我有两个时间来检查两个不同的值。
while (Variaveis_importadas[varfossaalarme] != Convert.ToInt32(situacao[3]))
{
Thread.Sleep(60000);
while (!ClientGetVARs(Variaveis_importadas, varLenght, fHandle_global))
{
Console.WriteLine("Erro na função ClientGetVARs. Não foi possivel receber os dados.");
Thread.Sleep(2000);
Console.Clear();
}
if (ClientGetVARs(Variaveis_importadas, varLenght, fHandle_global))
{
Console.WriteLine("Os dados foram recebidos.");
}
Thread.Sleep(2000);
Console.Clear();
}
while (Variaveis_importadas[varst04] >= Convert.ToInt32(situacao[7]))
{
Thread.Sleep(60000);
while (!ClientGetVARs(Variaveis_importadas, varLenght, fHandle_global))
{
Console.WriteLine("Erro na função ClientGetVARs. Não foi possivel receber os dados.");
Thread.Sleep(2000);
Console.Clear();
}
if (ClientGetVARs(Variaveis_importadas, varLenght, fHandle_global))
{
Console.WriteLine("Os dados foram recebidos.");
}
Thread.Sleep(2000);
Console.Clear();
}
我想知道他们会以这种方式同时执行,还是需要一些其他功能才能同时执行。
我已经看到一个名为 BackgroundWorker 的类,但它只讨论了 Windows 窗体应用程序而不是控制台应用程序。
【问题讨论】:
-
不,您的第一个循环将执行,然后是您的第二个循环。您可以查看计时器或线程以同时运行这两个部分,或者您可以只有 one 循环每分钟检查两个部分。 (你说每两分钟检查一次,但你的主 Thread.Sleep 是一分钟。)
-
我会说你可以使用线程。
-
BackgroundWorker 用于并行运行代码。它在图形界面中很常见,因此界面看起来是响应式的(一个线程中的进度条,另一个线程中的实际工作),尽管它绝对不是必需的(即它在控制台中工作)
-
查看 await Task.Delay() 而不是 Thread.Sleep(); 以避免阻塞线程
-
@JGH 这对控制台应用程序没有多大帮助......或者顺序运行两个
while循环。await只会让初学者的代码更加复杂...
标签: c# loops while-loop console-application