Я обмениваюсь данными с платой реле ввода / вывода по последовательной шине.Плата контролируется и запрашивается с помощью байтовых команд.Моя цель состоит в том, чтобы backgroundworker
периодически оценивать состояния реле и входов и обновлять графический интерфейс во время выполнения «сценария», который выполняет ряд действий на плате.
У меня есть две функции, которыепередавать и получать команды на доску.Моя проблема заключается в том, что если я запускаю свой «сценарий», используя backgroundworker
для обновления графического интерфейса, я начинаю получать ошибки чтения и записи - я полагаю, потому что оба процесса получают доступ к одной и той же функции в течение короткого промежутка времени.
static SerialPort USB_PORT;
byte[] SerBuf = new byte[64];
byte usb_found = 0;
byte states = 0;
private void transmit(byte write_bytes)
{
try
{
if (usb_found == 1) USB_PORT.Write(SerBuf, 0, write_bytes); // writes specified amount of SerBuf out on COM port
}
catch (Exception)
{
usb_found = 0;
MessageBox.Show("write fail");
return;
}
}
private void receive(byte read_bytes)
{
byte x;
for (x = 0; x < read_bytes; x++) // this will call the read function for the passed number times,
{ // this way it ensures each byte has been correctly recieved while
try // still using timeouts
{
if (usb_found == 1) USB_PORT.Read(SerBuf, x, 1); // retrieves 1 byte at a time and places in SerBuf at position x
}
catch (Exception) // timeout or other error occured, set lost comms indicator
{
usb_found = 0;
MessageBox.Show("read fail");
return;
}
}
}
Есть ли способ «поставить в очередь» любые и все вызовы этих двух функций, чтобы вся функция завершилась до начала следующей?