Переопределите Application.Doevents () в C #, поэтому он отключен в режиме отладки. - PullRequest
1 голос
/ 23 мая 2011

Я отлаживаю приложение, портированное с vb6. Он имеет Application.Doevents замусорил повсюду, что хорошо, за исключением случаев, когда я вхожу в отладчик. Как только я перехожу через элемент управления Application.DoEvents (), он переносится в какую-то случайную область, которая ожидается в зависимости от того, что ожидает сообщения. Как я могу элегантно переопределить этот метод в одном месте на уровне приложения, чтобы он работал следующим образом (псевдокод)

protected override void Application.Doevents()
{
  if (!Debugger.IsAttached)
     Application.Doevents()
}  

без использования #ifdef DEBUG повсюду. спасибо

Ответы [ 4 ]

2 голосов
/ 23 мая 2011

Нет необходимости - или возможности - переопределять его.
Просто создайте статический класс со статическим методом в нем и поместите код, который вы хотите иметь внутри.Измените все вызовы на Application.DoEvents на вызовы этого статического метода.

1 голос
/ 23 мая 2011

У него есть Application.Doevents, замусоренные повсюду, что хорошо, за исключением случаев, когда я вхожу в отладчик.

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

Выполните глобальный поиск, замену и комментированиекаждая строка, где эта функция вызывается.Затем отладьте полученный код, чтобы выяснить, где он ломается и что нужно сделать, чтобы его исправить.

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

Application.DoEvents - ошибка, ожидающая появления.Не позволяйте этому кусать вас.Расстраивающее поведение, которое вы видите в отладчике, это точно то же самое, что происходит все время внутри кода вашего приложения.И что бы вы ни делали , не отправляйте код, содержащий вызовы Application.DoEvents, которые вы не тщательно отладили.

1 голос
/ 23 мая 2011

Вы не можете переопределить это.Это статический метод.Тем не менее, вы можете легко написать свой собственный класс и заменить все текущие вызовы, например, на Application.DoEvents на CustomApplication.DoEvents.

(Лично я не думаю, что это нормально для приложения, которое будет приправленоDoEvents звонит в первую очередь, но это другое дело.)

0 голосов
/ 23 мая 2011

Поместите определение переопределения в #ifdef DEBUG.

...