2015-06-28 5 views
1

Я пытаюсь сделать простое приложение Windows Form в Visual Studios, что позволит мне контролировать настройку яркости светодиодной полосы, подключенной к Arduino.Доступ к C# запрещен при попытке доступа к порту связи?

Программирование внутри Arduino уже выполнено и выполнено, но программирование на C# - это то, что вызывает у меня проблемы.

При попытке отправить строки информации через порт, я получаю следующее сообщение:

Необработанное исключение типа «System.UnauthorizedAccessException» произошло в System.dll. Дополнительная информация: Доступ к порту COM3 запрещен.

Вот кусок кода, который дает мне неприятность:

private void trackBar1_Scroll(object sender, EventArgs e) 
    {  
     String color = trackBar1.Value.ToString(); 

     System.IO.Ports.SerialPort myPort = new System.IO.Ports.SerialPort("COM3"); 
     if (myPort.IsOpen == false){ 
     //if not open, open the port 
      myPort.Open(); // Error is shown here. 
     } 
     if (myPort.IsOpen){ 
      myPort.WriteLine(color); 
     } 
    } 

я не включил какое-либо закрытие порта, потому что сначала я хочу, чтобы получить эту работу, и я не понимая, что происходит. Я уверен, что никакие другие приложения не используют порт; Arduino подключается к нему через USB, чтобы получать его питание, но кроме этого, он не получает или не передает какой-либо другой процесс.

Я попытался сменить порт из COM3 на другие порты, что является одним из основных решений для подобных вопросов, но все же я получаю тот же результат.

Спасибо за помощь.

+0

Открытие последовательного порта в событии Scroll никогда не бывает правильным, это событие срабатывает слишком часто. SerialPort не поддерживает быстрое открытие и закрытие порта, есть рабочий поток, который должен выйти, и это требует времени. Откройте порт, который вы используете в своем конструкторе, и держите его открытым для жизни вашего пользовательского интерфейса. –

+0

Я согласен, когда вы говорите, что это не правильно, чтобы поместить его в событие Scroll (я все еще изучаю весь подход C# и визуальных студий), но последовательный порт не обязательно должен открываться каждый раз, когда он уволен, потому что он инкапсулирован в выражении if. Я буду держать в виду роль конструктора, хотя, если бы я знал, как использовать конструкторы с LOL UI. Спасибо @HansPassant! – VDG

ответ

2

Наиболее распространенная причина ошибок, допущенных при доступе к COM-портам, - это COM-порт, который уже открывается какой-либо другой программой. Вы можете использовать portmon, чтобы узнать, какая именно программа. Это может быть ваша собственная программа, так как вы никогда не закрываете порт должным образом.

+0

может быть, потому что последовательный монитор использует его или может быть Arduino IDE? –

Смежные вопросы