Tôi đã đọc rất nhiều câu hỏi ở đây về cách đọc dữ liệu từ cổng nối tiếp bằng cách sử dụng lớp .NET SerialPort nhưng không có cách tiếp cận được giới thiệu nào đã chứng minh hiệu quả hoàn toàn đối với tôi.Cách chính xác để đọc cổng nối tiếp bằng cách sử dụng .NET framework là gì?
Đây là mã tôi đang sử dụng cho bây giờ:
SerialPort port = new SerialPort("COM1");
port.DataReceived += new SerialDataReceivedEventHandler(MyDataReceivedHandler);
Và xử lý sự kiện:
void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int count = port.BytesToRead;
byte[] ByteArray = new byte[count];
port.Read(ByteArray, 0, count);
}
Nhưng tôi vẫn còn thiếu một số dữ liệu đôi khi. Tôi đã thử cách khác nhau để đọc dữ liệu trong trình xử lý sự kiện nhưng không có may mắn. .NET 4.5 mang lại khả năng mới để thực hiện một số nhiệm vụ không đồng bộ, như với phương thức ReadAsync có vẻ có thể sử dụng trên luồng SerialPort, tôi tò mò muốn xem phương pháp được đề nghị để xử lý những trường hợp đó là gì.
Câu hỏi của bạn thực sự mơ hồ. "Tôi vẫn còn thiếu một số dữ liệu đôi khi" cũng giống như nói với thợ máy của bạn "xe của tôi làm cho một tiếng ồn buồn cười đôi khi" và yêu cầu bao nhiêu nó sẽ có chi phí để sửa chữa. Có lẽ [câu trả lời này] (http://stackoverflow.com/a/2966357/62576) cho một câu hỏi liên quan có thể hữu ích. Tuy nhiên, tôi nghĩ bạn cần phải cụ thể hơn nhiều nếu bạn muốn được giúp đỡ; như vậy, không có nhiều câu trả lời bằng cách nhìn vào các câu hỏi khác về chủ đề này. –
Bạn nói đúng, tôi sẽ đưa một ví dụ thực tế lại với nhau để minh họa rõ hơn những gì đang xảy ra ... –
Thực hiện giao thức truyền thông nối tiếp qua RS232 hoặc 485 là một nhiệm vụ thực sự khó khăn. Nó đòi hỏi rất nhiều kinh nghiệm. Tôi đã thực hiện điều này kể từ ngày DOS cũ tốt và vẫn gặp khó khăn trong một số cạm bẫy phổ biến. Tại sao bạn không cố gắng tìm một sản phẩm đáng tin cậy của bên thứ ba để xử lý thông tin liên lạc nối tiếp? Họ sẽ có thể ironed ra tất cả nhiều, nhiều, nhiều lỗi bạn sẽ rơi vào chính mình :-) Nếu đây là một tập thể dục, sau đó đi trước, nó cho sự hài lòng tuyệt vời để cuối cùng chủ thông tin liên lạc nối tiếp! :-) – Loudenvier