0

Я написал консольное приложение .NET (на C#) на v4.5.1. Мой Main метод выглядит следующим образом:Использование события CancelKeyPress в консольном приложении .NET

public static void Main(string[] args) 
{ 
    Console.CancelKeyPress += delegate 
           { 
            CancelToken.Cancel(); 
           }; 

    var kbTask = Task.Run(async() => 
           { 
            while (true) 
            { 
             await ProcessCommand(Console.ReadLine()); 
            } 
           }, CancelToken.Token); 

    kbTask.Wait(CancelToken.Token); 
} 

Один из возможных команд (обрабатывается ProcessCommand) вызывает длительный процесс, который я хотел бы, чтобы иметь возможность отменить с помощью CTRL + C через Console.CancelKeyPress делегата.

Но когда я это делаю, Visual Studio открывает вкладку, в которой говорится, что «mscorlib.dll не загружен», а затем ничего не делает - консоль остается открытой, но не отвечает.

Я также пытался запустить приложение вне отладки, но не могу найти исполняемый файл.

+0

Вам нужно проверить состояние токена отмены в цикле 'while' после разрыва, когда он установлен. – Sean

+0

Crystal Ball говорит, что вы используете Avast. Удалите его как можно скорее. –

+0

@ HansPassant Ваш хрустальный шар неправильный. AV не установлен, кроме Windows Defender. – awj

ответ

0

Перейти к инструментам, настройкам, отладке, символам и установить расположение кеша. Затем нажмите на загрузку выше, и вы получите нужные вам символы и сохраните их в указанном вами месте кеширования.

Инструменты компилятора Microsoft создают символы в отдельных файлах с расширением .pdb (база данных программы). Это позволяет создавать отдельные символы для релизов. С помощью сервера символов ваша среда IDE может получить файл символов, соответствующий определенной версии DLL во время отладки. Вы также можете настроить эту систему для своих собственных двоичных файлов продуктов, которые могут быть очень полезны для отсрочки отладки любых сбоев на машинах конечного пользователя.

Для получения дополнительной информации об использовании общедоступных символов см. Microsoft Documentation.

+0

Сделав это, я вижу, что символы динамически загружаются, но теперь, когда я нажимаю CTRL + C, Visual Studio открывает вкладку, в которой говорится, что «Источник недоступен», и снова консоль не отвечает. – awj

+0

«Источник недоступен» Ошибка возникает, когда приложение пытается прочитать некорректный код. Позвольте мне разобраться в этом. – BilalAhmed

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