SerialPort.Read для получения данных при выполнении Step Over, но не при нормальном выполнении - PullRequest
0 голосов
/ 04 мая 2019

Я создаю приложение WPF, которое должно взаимодействовать через последовательный порт. Когда я отправляю некоторые данные в последовательный порт, он должен отвечать некоторыми данными. Например, я посылаю PIG \ r \ n, и он отвечает ACK \ r \ n. Во время обычного выполнения кода я посылаю команду, чтобы получить данные от третьего устройства, подключенного ко второму (которое подключено к моему последовательному порту), я не получаю никакого ответа, только исключение тайм-аута. Тем не менее, когда я пытаюсь отладить код (используя шаг за шагом), он работает как ожидалось.

Я пытаюсь сделать шаг за короткое время, чем тайм-аут (30 с), и все еще получаю проблему Я создал консольное приложение, чтобы проверить мой код, и он отлично работает на нем. Итак, я предполагаю, что есть некоторые проблемы с WPF, но я не знаю, где искать.

Функция My Read

public ComandoFactory Ler()
{
    try
    {
        string Mensagem = sp.ReadTo("\r\n");
        var comando = new ComandoFactory(Mensagem.Substring(0,3), Mensagem.Substring(3));
        return comando;
    }
    catch (TimeoutException e)
    {
        return new ComandoFactory("ERR", "TIMEOUT");
    }
    catch(ArgumentOutOfRangeException e)
    {
        return new ComandoFactory("ERR", "ARGUMENT");
    }
}

ReadTo должен что-то вернуть, вместо того чтобы указывать тайм-аут.

Любая помощь приветствуется. Спасибо

1 Ответ

0 голосов
/ 09 мая 2019

Я исправил это, создав небольшое ожидание между операцией записи и чтения.100 мс сделали свое дело, и код работает сейчас.Однако я знаю, что это не лучшее решение.Идея @Baddack об использовании DataReceived, вероятно, лучше, и я попробую, когда смогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...