Создайте список, который показывает доступные последовательные порты синхронно
Привет.
Я создаю программу windows (Visual Studio - C#) для связи с микроконтроллером AVR с помощью последовательного порта. Я хочу показать доступные последовательные порты в списке (или combobox) и обновить список немедленно, когда новое устройство доступно или устройство отключено.
В настоящее время я использую кнопку "Обновить", чтобы сделать это, но я хочу, чтобы она обновлялась автоматически.
Кроме того, у меня есть кнопка "подключиться". Я хочу, чтобы он был отключен, когда нет ни одного доступного порта, и был включен, когда некоторые порты доступны и пользователь выбрал один из них. В настоящее время кнопка "Обновить" обновляет свое состояние.
Я уже искал в google, но не нашел никакой "понятной" вещи! Я не очень хорошо знаком с C# и вообще с языками ООП (я просто писал C около 3 лет).
Что я уже пробовал:
Попробовал привязать данные, но это не сработало. Я думаю, что использовал его неправильно.
Текущий код (упрощенный):
Файл MainWindow.язык XAML:
<ListBox x:Name="portList" Grid.Row="1" Margin="0,5"/> <Button x:Name="refreshButton" Grid.Row="2" Content="Refresh" HorizontalAlignment="Left" Width="75" Click="RefreshButton_Click"/> <Button x:Name="connectButton" Grid.Row="2" Content="Connect" HorizontalAlignment="Right" Width="75" Click="ConnectButton_Click"/>
ManiWindow.язык XAML.в CS:
public MainWindow() { InitializeComponent(); Port_check(); } private void RefreshButton_Click(object sender, RoutedEventArgs e) { Port_check(); } private void ConnectButton_Click(object sender, RoutedEventArgs e) { if (!connected) { Ser_Connect(); } else { Ser_Disconnect(); } }
Серийный.в CS:
public readonly SerialPort serialPort = new SerialPort { BaudRate = 38400, ReadBufferSize = 8, WriteTimeout = 500, ReadTimeout = 5000 }; public static bool connected = false; public void Port_check() { string[] ports = SerialPort.GetPortNames(); if (ports.Length != 0) { Ports_available(ports); } else { No_ports_available(); } } private void Ports_available(string[] ports) { portList.Items.Clear(); foreach (string port in ports) { portList.Items.Add(port); } portList.IsEnabled = true; portList.SelectedIndex = 0; connectButton.IsEnabled = true; } private void No_ports_available() { portList.Items.Clear(); portList.IsEnabled = false; connectButton.IsEnabled = false; } public void Ser_Connect() { //connection codes } public void Ser_Disconnect() { if (serialPort.IsOpen) { serialPort.DtrEnable = false; serialPort.Close(); } connectButton.Content = "Connect"; portList.IsEnabled = true; refreshButton.IsEnabled = true; connected = false; Port_check(); }
CHill60
"Я думаю, что использовал его неправильно" ... чтобы мы могли судить, что нам нужно увидеть ваш код!
Richard MacCutchan
Вы использовали отладчик, чтобы проверить, действительно ли вы получаете какие-либо элементы для добавления в свой список?
AmirSina Mashayekh
Приведенный выше код работает отлично, но я хочу избавиться от кнопки "Обновить".
Richard MacCutchan
Зачем вам это нужно?
AmirSina Mashayekh
1 - чтобы узнать больше о c#, wpf и ...
2 - чтобы сделать мое приложение лучше! :)
Richard MacCutchan
Это не имеет никакого смысла.