C# DateTimePicker stuck in loop

前端 未结 5 1959
死守一世寂寞
死守一世寂寞 2021-01-21 22:06

I have a datetimepicker in C#. When I click on it, it expands to show a monthly calendar, when I click the left arrow to go back a month, it changes the value and calls my even

相关标签:
5条回答
  • 2021-01-21 22:47

    I also have the same problem. In my case, instead of calling DoEvents I'm updating a Crystal Report view. The only workaround I found is to update my view upon the CloseUp event instead of ValueChanged or TextChanged.

    Scott, how did you finally corrected your problem ?

    0 讨论(0)
  • 2021-01-21 22:48

    Without seeing any of the code, try these steps:

    1. Comment out the entire event handler to see how fast it runs with nothing attached to it.
    2. Uncomment lines one at a time to see which ones are causing the most problems.
    3. Analyze those method calls.
    4. ...
    5. Profit!
    0 讨论(0)
  • 2021-01-21 22:55

    You could try a couple of things. Get rid of the DoEvents inside of the ChangedEvent. Call the doevents inside of a seperate function after maybe a period of time (thread.sleep() ?).

    I know doevents does cause issues but I rarely use it.

    0 讨论(0)
  • 2021-01-21 23:06

    The DateTimePicker ValueChanged event is buggy. Per Microsoft Windows Forms Team on this page https://connect.microsoft.com/VisualStudio/feedback/details/1290685/debugging-datetimepicker-event-hangs-vs:

    "The DateTimePicker control installs a mouse hook as part of its functionality, but when the debugger has the WinForms application stopped on a breakpoint, it allows the possibility of a deadlock if VS happens to get a mouse message. For now, the deadlock is unfortunately a consequence of the DateTimePicker's design. The mouse hook is installed when the drop down is clicked to display the calendar. This means that breakpoints should not be sent in any event handlers which would be called while the calendar is active. We are currently investigating whether it is possible to address this issue and we will update this thread with further information if we are able to make a fix available."

    0 讨论(0)
  • 2021-01-21 23:06

    event procedure ValueChanged : set parameter in sender.tag enableTimer and execute parameter using sender.tag

    example:

    private void DateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            DateTimePicker ThisSender = (DateTimePicker)sender;
            Timer.Tag = ThisSender.Name.ToString() + "=" + ThisSender.Value;
            Timer.Enabled = true;
        }
    
    0 讨论(0)
提交回复
热议问题