我正在制作一个项目,让应用程序运行数小时,每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。
答案 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();
}