Я занимаюсь разработкой приложения WinForms для ПК на C #, которое позже необходимо подключить к микроконтроллеру.На данный момент, для целей тестирования, я создал виртуальный нуль-модем на своем компьютере и связал его с терминальной программой.
Виртуальный нуль-модем, который я использую, это "com0com": http://sourceforge.net/projects/com0com/
Вот скриншот настроек пары COM-порта:
В моем приложении я использую компонент serialPort
.Вот как настраивается serialPort:
public bool SerialPortSetup(String cp)
{
String port = cp;
int baud = 19200;
Parity parity = Parity.None;
int databit = 8;
StopBits stopbit = StopBits.One;
try
{
// Initialize serial port
serialPort1 = new SerialPort(port, baud, parity, databit, stopbit);
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPortDataReceived);
serialPort1.Open();
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
Другие свойства serialPort:
Терминальная программа, которую я подключил к COM2, настроена с той же скоростью передачи данных, четность, база данных, стоп-бит и т. д. Когда я подключил свое собственное приложение к COM1, а терминал к COM2, все это работает просто отлично.И запись, и чтение в обоих направлениях.
Однако, когда я не использую порт COM2 (то есть терминальная программа не открывается), мое приложение зависает как раз в секунду, когда я начинаю использовать serialPort1.Write(str)
где str - просто случайная строка.Когда я запускаю свое приложение из Visual Studio, я могу закрыть его, только остановив отладку.Это не значит, что Windows помечает его как «не отвечающий».Кстати, я всегда проверяю, открыт ли последовательный порт, прежде чем писать в него.
Мне нужна эта проблема, чтобы уйти.Идеи?