Я пытался отправлять и читать команды с помощью последовательного порта COM4, который уже сконфигурирован с помощью этого кода, он подключен к купюроприемник устройстваПоследовательный порт для записи и чтения событие не подписавшись/не читает последовательный порт
im, используя событие, чтобы подписать каждый раз, когда устройство отправляет ответ, однако при дебюнге я узнал, что он никогда не достигает события или не подписывается на него, я читал всю неделю, как решить эту проблему, не повезло,
Even если я случайно поставил строки «читать порт» сразу после «строк порт записи», и программа попадает на
ptSerial.Read(RxMensaje, 0, 5);
линия программа просто frezzes и я должен остановить его, надеюсь, кто-то здесь может помочь мне Oput
public partial class Form1 : Form
{
public SerialDataReceivedEventHandler DataReceivedDelegate;
public Form1()
{
InitializeComponent();
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
DataReceivedDelegate = new SerialDataReceivedEventHandler(DataReceivedHandler);
//SerialPort sp = (SerialPort)sender;
//string indata = sp.ReadExisting();
byte[] RxMensaje = new byte[5];
ptSerial.Read(RxMensaje, 0, 5);
rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);
// rtbDevice.Text = indata;
}
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
Open(sender, e);
}
catch (Exception ex)
{
lblSalida.Text = ex.Message;
}
}
private void Open(object sender, EventArgs e)
{
ptSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
ptSerial.Open();
lblSalida.Text = "Puerto COM4 Abierto";
}
private void btnSend_Click(object sender, EventArgs e)
{
if (ptSerial.IsOpen)
{
byte[] TxMensaje = new byte[5] { 0x02, 0x00, 0x01, 0xFE, 0xFF }; //CCtalk
ptSerial.Write(TxMensaje, 0, 5);
rtbHost.Text = "2 0 1 254 255 Enviado";
//byte[] RxMensaje = new byte[5];
//ptSerial.Read(RxMensaje, 0, 5);
//rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);
ptSerial.Close();
lblSalida.Text = "Bytes Enviados Pto Cerrado";
}
else
{
lblSalida.Text = "Puerto Cerrado";
}
}
private void btnCerrar_Click(object sender, EventArgs e)
{
if (ptSerial.IsOpen)
{
ptSerial.Close();
lblSalida.Text = "Puerto COM4 Cerrado";
}
else
{
lblSalida.Text = "No ocurrio nada :(";
}
}
}
Я настоятельно рекомендую вам использовать перекрывающий читать вместо 'DataReceived' события. Более подробную информацию можно найти по адресу: http://www.sparxeng.com/blog/software/must-use-net-system-io-ports-serialport –
Он должен висеть. Либо используйте Read() напрямую, либо * используйте событие DataReceived. Вы не можете использовать их обоих. В этом коде есть много ошибок, затрачивая некоторое время на чтение по этому вопросу, и поиск существующего рабочего кода будет разумным. –