C # DateTimePicker застрял в цикле - PullRequest
2 голосов
/ 13 октября 2009

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

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

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

private void afunction() 
{ 
listView1.Clear(); 
panel1.Visible = true; 
Application.DoEvents(); 
} 

Ответы [ 4 ]

4 голосов
/ 01 февраля 2010

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

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

2 голосов
/ 11 февраля 2017

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

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

1 голос
/ 13 октября 2009

Не видя ни одного кода, попробуйте эти шаги:

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

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

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

...