У меня есть простое приложение .NET C #, которое связывается с USB-устройством.Если связь успешна, DataReceivedHandler «должен» принять ответ устройства (port.ReadExisting) и обновить пользовательский интерфейс - простой элемент управления asp: label.
Я знаю, что обновления пользовательского интерфейса происходят в другом потоке,и нужно использовать делегата для вызова функции обновления.Я пробовал несколько разных решений, но не смог заставить его работать.Я могу подтвердить, что связь между компьютером и устройством успешна.
Вот код:
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
namespace SerialPortCommunication
{
public delegate void UpdateLogDelegate(string msg);
public partial class button : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public void UpdateLog(string msg)
{
lblLog.Text = msg;
}
protected void Button1_Click(object sender, EventArgs e)
{
var request = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }
SerialPort port = new SerialPort("COM8");
port.BaudRate = 19200;
port.Parity = Parity.Even;
port.StopBits = StopBits.One;
port.DataBits = 7;
port.Open();
port.Write(request, 0, request.Length);
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
string incomingData = port.ReadExisting();
UpdateLogDelegate log = new
UpdateLogDelegate(UpdateLog);
log.Invoke(incomingData);
port.Close();
}
}
}
Заранее спасибо.:)