Как закрыть COM1 после того, как я оставил его открытым? - PullRequest
2 голосов
/ 16 января 2012

Я работаю в Visual Studio C # и открыл последовательный порт, но не закрыл его должным образом. Теперь я не могу запустить свою программу, чтобы попытаться закрыть ее. Я знаю, что это я использовал, но каким-то образом я потерял контроль над этим ..? Есть ли способ закрыть его в противном случае?

Я пытался выйти из визуальной студии, и он по-прежнему говорит, что мой доступ запрещен. Я отключил и повторно включил в фактический объект, который я использую. Мой следующий шаг - перезагрузить компьютер, но я не хочу делать это каждый раз, когда я ошибаюсь (что часто!)

Кстати, я работаю в лаборатории и не имею административного доступа на этом компьютере. Еще одно замечание: текст ошибки «Доступ к порту« COM1 »запрещен».

В ответ на запрос кода .. comPort.Open (); Что еще вы ищете?

private void updateAccuSwayData() {
    Console.WriteLine("Update thread started...");
    comPort.Open();
    comPort.WriteLine("Q");
    Thread.Sleep(5);
    while (!cancelRequested) {
        //do stuff...
    }
    Console.WriteLine("Update thread halted.");
    comPort.WriteLine("R");
    comPort.Close();
}

Короче говоря, я закончил сеанс отладки, пока он был в середине чего-то, что кажется. Это обо всем, что я знаю.

1 Ответ

5 голосов
/ 16 января 2012

Вам, вероятно, потребуется перезагрузка, чтобы прояснить ситуацию, хотя один из подходов заключается в использовании Process Explorer и поиске дескриптора для \Device\Serial0. Затем вы можете увидеть, работает ли закрытие этого дескриптора, но может и не работать.

Чтобы не допустить этого в будущем, вам нужно поместить comPort.Close() в finally -блок:

try
{
    comPort.Open();
    // ...
}
finally
{
    // Almost always ensures the COM port will be cleaned up,
    // however, the MSDN remarks state that the port may not
    // be closed immediately.
    comPort.Close();
}
...