Я новичок в C#, и у меня есть устройство (периферийное), которое мне нужно для опроса через последовательный порт/USB из приложения консоли C#. Хотя приведенный ниже код, по-видимому, не вызывает никаких исключений (ошибок) и не выполняет опрос. Что может случиться? Благодарю.Использование параллельной библиотеки задач (TPL) для опроса
Выход консоли:
Here goes...
t1: System.Threading.Tasks.Task
PD. От отладки у меня сложилось впечатление, что while (true) {...} блок не работает.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using T1NET;
namespace ValController
{
class Program
{
static void Main(string[] args)
{
T1NET.comm Device = new T1NET.comm();
bool devfound = true;
Device.Port = new T1NET.COM_port();
Device.Port.RtsEnable = false;
Device.HandlePort = true;
Device.Port.BaudRate = 9600;
Device.Port.PortName = "COM4";
Device.Device = T1NET.Device.Valid;
Device.Port.ReadTimeout = 100;
if (devfound)
{
BV_Device.HandlePort = true;
Console.WriteLine("here goes...");
var t1 = Task.Factory.StartNew(() =>
{
while (true)
{
System.Threading.Thread.Sleep(100);
System.Threading.Thread.BeginCriticalRegion();
T1NET.Answer answer = Device.RunCommand(T1NET.T1NETCommand.Poll);
Console.WriteLine("answer:" + answer);
}
});
Console.WriteLine("t1: " + t1);
}
}
}
}
Единственный способ, которым 'while' не выполняется, - это если задача никогда не запускается (см. Http://stackoverflow.com/questions/12010131/task-factory- StartNew-не-выполнение-на-задачи-когда-развернутый). Если это не так, попробуйте помещать перерыв непосредственно перед вашим оператором 'answer = ...' внутри цикла while, он попадает более одного раза? Возможно, ваша задача ждет ответа на неопределенное время при первом исполнении. – Vlad
Подождите ... Я просто понял, что вы начинаете асинхронную задачу, а затем программа заканчивается. Попробуйте дождаться завершения задачи. – Vlad
Привет, Влад, спасибо, но он ведет себя точно так же. – ekremer