Я разрабатываю последовательный монитор для своего приложения в WPF, программирую на C #.У меня проблемы с управлением событием DataReceived, потому что мне нужен монитор в реальном времени, например, HyperTerminal или TeraTerm (я их не использую, потому что хочу, чтобы мой терминал был частью инструмента связи Ethernet, который я уже разработал с использованием winPcap).
Мне нужно прочитать некоторые данные из моего микроконтроллера, отобразить их в textBox (он просто печатает меню и список доступных команд), и когда он завершит последовательность загрузки, я хотел бы с ней взаимодействовать,ничего особенного, просто отправьте команду «flash-» для программирования fpga платы.
Мое приложение отправляется в исключение, когда я пытаюсь обновить textbox.text с полученными данными.Я пытался искать везде, но, несмотря на множество примеров, я не уловил то, что правильно объясняет код.
Вот код, спасибо заранее
namespace WpfApplication1 {
/// <summary>
/// Interaction logic for SerialMonitor.xaml
/// </summary>
public partial class SerialMonitor : Window {
//VARIABLES
public SerialPort comPort = new SerialPort();
public SerialMonitor() {
//initialization
InitializeComponent();
scanPorts();
}
private void scanPorts() {
textBoxIndata.Clear();
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports) {
comboBoxPorts.Items.Add(port);
}
}
private void openComBtn_Click(object sender , RoutedEventArgs e) {
comPort.Parity = Parity.None;
comPort.DataBits = 8;
comPort.ReadTimeout = 500;
comPort.StopBits = StopBits.One;
if (comboBoxPorts.SelectedItem != null && comboBoxPorts.SelectedItem != null) {
comPort.PortName = comboBoxPorts.SelectedItem.ToString();
comPort.BaudRate = Convert.ToInt32(comboBoxBaud.Text);
try {
//Open port and add the event handler on datareceived
comPort.Open();
comPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
catch (Exception ex) {
MessageBox.Show(ex.ToString());
}
}
if (comPort.IsOpen) {
label1.Content = "COM PORT OPEN";
}
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) {
}
//function to update the textBox, didn't manage to get it working
private void updateUI (string s) {
}
//CLOSE AND EXIT BUTTONS
private void closeComBtn_Click(object sender , RoutedEventArgs e) {
if (comPort.IsOpen) {
comPort.Close();
label1.Content = "COM PORT CLOSED";
}
}
private void exitBtn_Click(object sender , RoutedEventArgs e) {
if (comPort.IsOpen) {
comPort.Close();
}
this.Close();
}
}
}
У меня теперь проблема в том, что когда я посылаю свою команду, используя SerialPort.Write (string cmd) , я не могу прочитать ответ ...
РЕДАКТИРОВАТЬ:Исправлено все, я выложу код, если кто-то заинтересован в программировании такого инструмента, как этот:)