Вопрос

У меня есть datetimepicker в C #.Когда я нажимаю на него, он раскрывается, чтобы показать ежемесячный календарь, когда я нажимаю стрелку влево, чтобы вернуться на месяц назад, он изменяет значение и вызывает мое событие.Событие включает в себя слишком много кода, чтобы включать его здесь, но само собой разумеется, что оно вызывает несколько функций.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на стрелку влево, она застревает в каком-то цикле и продолжает снижаться в течение нескольких месяцев, и я не могу это остановить.Одна из вызываемых функций содержит приложение.DoEvents() и если я прокомментирую это, это не застрянет в цикле, но мне нужна эта команда для обновления другого раздела интерфейса.Есть какие-нибудь идеи, почему это происходит?

Иногда я могу продублировать его с помощью этого кода, иногда он просто делает это пару раз, иногда он застревает в цикле.

private void DateTimePickerValueChangedEvent(object sender, EventArgs e) 
{ 
afunction(); 
} 

private void afunction() 
{ 
listView1.Clear(); 
panel1.Visible = true; 
Application.DoEvents(); 
} 
Это было полезно?

Решение

У меня тоже такая же проблема.В моем случае вместо вызова DoEvents я обновляю представление Crystal Report.Единственное решение, которое я нашел, - это обновить мой вид при событии CloseUp вместо valueChanged или TextChanged .

Скотт, как ты в конце концов решил свою проблему ?

Другие советы

Событие DateTimePicker valueChanged с ошибкой.В соответствии с командой Microsoft Windows Forms на этой странице https://connect.microsoft.com/VisualStudio/feedback/details/1290685/debugging-datetimepicker-event-hangs-vs:

"Элемент управления DateTimePicker устанавливает перехват мыши как часть своей функциональности, но когда отладчик останавливает приложение WinForms на точке останова, это допускает возможность взаимоблокировки, если VS случайно получит сообщение мыши.На данный момент тупиковая ситуация, к сожалению, является следствием дизайна DateTimePicker .Крючок мыши устанавливается при нажатии на выпадающий список для отображения календаря.Это означает, что точки останова не должны отправляться ни в каких обработчиках событий, которые вызывались бы, пока календарь активен.В настоящее время мы изучаем, возможно ли устранить эту проблему, и мы обновим эту тему дополнительной информацией, если сможем сделать исправление доступным ".

Не видя никакого кода, попробуйте выполнить следующие действия:

  1. Закомментируйте весь обработчик события чтобы увидеть, как быстро он выполняется без каких-либо привязок к нему.
  2. Раскомментируйте строки по одной, чтобы увидеть какие из них вызывают больше всего проблем.
  3. Проанализируйте эти вызовы методов.
  4. ...
  5. Прибыль!

Вы могли бы попробовать пару вещей.Избавьтесь от DoEvents внутри ChangedEvent.Вызовите doevents внутри отдельной функции, возможно, через определенный промежуток времени (thread.sleep() ?).

Я знаю, что doevents действительно вызывает проблемы, но я редко им пользуюсь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top