在c#console应用程序中同时进行2个循环

时间:2017-05-10 13:57:13

标签: c# loops while-loop console-application

我正在制作一个项目,让应用程序运行数小时,每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 Form Application而不是Console Application。

2 个答案:

答案 0 :(得分:-1)

您尝试运行代码的方式仅适用于单个线程,因为您需要同时执行一些新线程。

您可以使用.Net 4.0中的任务类我将向您​​展示一个示例,但您需要根据需要对其进行修改

Task.Run(() => {

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();
    }

上面的代码将为您的第一个循环启动异步操作,第二个循环将在您的主线程上运行。但是你仍然需要知道何时停止你的其他"线程,停止执行时该怎么做等。

Btw:Thread.Sleep将锁定自己的线程,因此它们不会相互影响。

答案 1 :(得分:-1)

您可以使用计时器或同时检查两个值。

      while (Variaveis_importadas[varfossaalarme] != 
  Convert.ToInt32(situacao[3]) ||  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();                
   }