Запись через последовательный порт - PullRequest
0 голосов
/ 31 января 2011

ниже вы можете увидеть вывод моей программы. Пока мое устройство начинает загружаться, через последовательный порт я отправляю serialport1.write ("\ n");и я возглавил автобут.тогда я должен отправить три команды с командой serialport1.write.если поток спит перед командой, команды выполняются, но я вижу результат после выполнения команд.Я имею в виду, если я засну поток за 1 секунду до команд, для 3 команд я вижу результат в richtextbox через 3 секунды.Зачем?Есть ли другой хороший способ выполнения команд?мой код ниже.

КОД:

_data = _serialPort.ReadExisting();
if (_data.StartsWith("Hit"))
{
    Thread.Sleep(1000);
    _serialPort.Write("\n");
    Thread.Sleep(200);
    _serialPort.Write("set moviargs...\n");
    Thread.Sleep(200);
    _serialPort.Write("saveenv\n");
    Thread.Sleep(200);
    _serialPort.Write("boot\n");
}

ВЫХОД:

Нажмите любую клавишу, чтобы остановить автозагрузку: 3 2 1 0

SMDKV210 # set moviargs "setenv bootargs console = ttySAC2,115200 smsc95xx.macaddr = 00: 09: DF: 90: 00: 03"

SMDKV210 # saveenv

Сохранение среды в загрузочном SMDKустройство ...

готово

SMDKV210 # boot

1 Ответ

0 голосов
/ 31 января 2011

Ваш пользовательский интерфейс не будет обновляться в Thread.Sleep.

Добавьте несколько шагов Application.DoEvents перед каждым вызовом «Sleep» для обновления пользовательского интерфейса.(или запустить код, говорящий с последовательным портом в фоновом потоке)

Вызов Application.DoEvents должен обрабатывать «ожидающие» события, такие как screenupdate, но также будет пытаться запускать нажатия кнопок.Вам нужно добавить механизм для отключения нажатий кнопок (просто отключите кнопки).

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