Я пытаюсь создать небольшое приложение для сбора данных, полученных от внешнего датчика, подключенного к COM10. Я успешно создал небольшой объект консоли и приложение С#, которое открывает порт и передает данные в файл в течение фиксированного периода времени с использованием цикла for.
Я хотел бы преобразовать это приложение, чтобы вместо него использовать событие dataReceived. После прочтения Top 5 SerialPort Tips, я все еще не могу показаться, что он работает, и я не знаю, чего мне не хватает. Я переписал консольное приложение, чтобы весь код находился в Main и был вставлен ниже. Может кто-то, пожалуйста, помогите рассказать мне, почему обработчик события port_OnReceiveDatazz не вызывается, хотя я знаю, что данные передаются в порт аппаратными средствами?
Спасибо
Азим
PS: Благодаря @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));
}
}
}