Я пытаюсь создать небольшое приложение для сбора данных, полученных от внешнего датчика, подключенного к COM10. Я успешно создал небольшой объект консоли С# и приложение, которое открывает порт и передает данные в файл в течение фиксированного периода времени с использованием цикла for.
Я хотел бы преобразовать это приложение, чтобы вместо этого использовать событие dataReceived для потоковой передачи. После прочтения Top 5 советов по SerialPort, я до сих пор не могу заставить это работать и не знаю, что мне не хватает. Я переписал консольное приложение так, что весь код находится в Main и вставлен ниже. Может кто-нибудь, пожалуйста, помогите мне просветить, почему обработчик событий port_OnReceiveDatazz не вызывается, хотя я знаю, что аппаратное обеспечение отправляет данные на порт?
Спасибо
Благодаря @Gabe, @Jason Down и @abatishchev за все предложения. Я в тупике и не могу заставить работать обработчик событий. Возможно, это как-то связано с устройством. Я могу жить, просто читая порт в потоке и передавая данные прямо в файл.
Код
namespace serialPortCollection
{ class Program
{
static void Main(string[] args)
{
const int bufSize = 2048;
Byte[] buf = new Byte[bufSize]; //To store the received data.
SerialPort sp = new SerialPort("COM10", 115200);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
// Wait for data or user input to continue.
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
}
// My Event Handler Method
private static void port_OnReceiveDatazz(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort) sender;
const int bufSize = 12;
Byte[] buf = new Byte[bufSize];
Console.WriteLine("DATA RECEIVED!");
Console.WriteLine(spL.Read(buf, 0, bufSize));
}
}
}