Приложение Visual Studio WinForms отправляет сообщения трассировки в отдельные окна сообщений.

Вопрос или проблема

Я разрабатываю приложение Windows Forms с использованием C# в Visual Studio 2022 версии 17.11.5.

Когда я пытаюсь отредактировать форму с помощью графического интерфейса, Visual Studio отправляет отладочные и трассировочные сообщения в окна сообщений, как показано здесь.

Сообщение прослушивателя трассировки:

Сообщение прослушивателя трассировки

Окно вывода показывает сообщение –

trce: Уведомление 1 обработчиков 'UI/ShowMessage'

Получение одного может быть вполне нормальным, но он выбрасывает десятки этих сообщений прежде, чем откроется форма для редактирования.

Любая помощь будет очень признательна.

Я пробовал перенести код в новое решение, но проблема все еще остается.

Чтобы воспроизвести проблему

Создайте пользовательский контрол, используя библиотеку управления Windows Forms для .NET.

Добавьте событие загрузки контрола.

private void UserControl1_Load(object sender, EventArgs e)
{
    Trace.WriteLine("Привет, мир!");
}

В том же решении добавьте новое приложение Windows Forms и с помощью графического интерфейса добавьте пользовательский контрол. Не требуется никакого кода, кроме того, что создается Visual Studio.

Когда вы открываете форму для редактирования, она отображает сообщение от прослушивателя трассировки.

Сообщение “Привет, мир”:

Сообщение 'Привет, мир'

Похоже, это либо то, как сейчас работает Windows Forms, либо проблема, которую они не собираются исправлять – см. этот вопрос на GitHub issue.

Вы можете обойти это, удалив стандартный прослушиватель трассировки и добавив свой собственный. Итак, в событии загрузки:

Trace.Listeners.RemoveAt(0);
Trace.Listeners.Add(new DefaultTraceListener { LogFileName = @"c:\temp\trace.log" });
Trace.WriteLine($"{ DateTime.Now.ToString() }");

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

Ответ или решение

К сожалению, возникшие у вас проблемы с выводом сообщений трассировки в Windows Forms приложении на C# являются известной особенностью текущей версии Visual Studio и Windows Forms. Давайте разберемся с этой ситуацией более подробно.

Проблема описания

Вы столкнулись с тем, что при редактировании формы в Visual Studio 2022 ваши сообщения трассировки не только отображаются в окне вывода, но и вызывают сообщения в виде всплывающих диалоговых окон, что затрудняет вашу работу. Проблема обостряется тем, что сообщения появляются в большом количестве даже при простых действиях, таких как открытие формы отредактировать ее.

Воспроизведение проблемы

Как вы уже указали, проблема воспроизводится при создании пользовательского контрола в библиотеке управления Windows Forms с добавлением обработчика события загрузки контрола. При этом вызов Trace.WriteLine выводит предупреждение каждую раз, когда загружается пользовательский контрол, что идеальным образом фиксируется в окне отладки. Это ведет к нежелательным всплывающим сообщениям, что не является ожидаемым поведением при работе в режиме дизайна.

Причина проблемы

Скорее всего, причина этой проблемы заключается в механизме обработки трассировки в Visual Studio, который инициирует вывод сообщений в диалогах. Данное поведение непреднамеренно вызывает дискомфорт для разработчиков, что также отмечалось в обсуждениях на GitHub (например, данная проблема).

Решение и обход проблемы

Решением проблемы может являться замена стандартного слушателя трассировки на ваш собственный. Это позволяет перенаправить сообщения трассировки в файл, избегая появления сообщений в диалоговых окнах.

Пример кода

В вашем обработчике события загрузки контрола вы можете использовать следующий код:

private void UserControl1_Load(object sender, EventArgs e)
{
    // Удаляем стандартный слушатель трассировки
    Trace.Listeners.RemoveAt(0);

    // Добавляем новый слушатель для записи в файл
    Trace.Listeners.Add(new DefaultTraceListener { LogFileName = @"c:\temp\trace.log" });

    // Трассировка сообщения в файл
    Trace.WriteLine($"Сообщение о загрузке: {DateTime.Now.ToString()}");
}

Этот код устраняет необходимость отображения всплывающих окон, а вместо этого записывает сообщения в указанный файл. Таким образом, вы сможете анализировать свои логи в любое удобное для вас время, не прерывая процесс разработки.

Заключение

Несмотря на то, что проблема с трассировкой сообщений в Windows Forms приложении может показаться легкой, на самом деле она представляет собой более глубокую несовместимость в текущих версиях инструментов разработки. Путем настройки поведения сообщения трассировки, используя вышеприведенные рекомендации, вы сможете значительно улучшить опыт работы с Visual Studio и сосредоточиться на разработке вашего приложения.

Если у вас будут дополнительные вопросы или вам понадобятся дополнительные рекомендации, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...