2

我在 C# 中有一个 datetimepicker。当我单击它时,它会展开以显示月历,当我单击左箭头返回一个月时,它会更改值并调用我的事件。该事件包含太多代码,无法在此处包含,但它调用了几个函数,不用说。
我遇到的问题是,当我单击左箭头时,它会卡在某种循环中,并且几个月来一直在下降,我无法阻止它。正在调用的函数之一包含 Application.DoEvents() ,如果我将其注释掉,它不会卡在循环中,但我需要该命令来更新界面的另一部分。知道为什么会这样吗?

我有时可以用这段代码复制它,有时它只做几次,有时它卡在循环中。

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

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

5 回答 5

4

我也有同样的问题。就我而言,我没有调用 DoEvents,而是更新了 Crystal Report 视图。我发现的唯一解决方法是根据 CloseUp 事件而不是 ValueChanged 或 TextChanged 更新我的视图。

斯科特,你最后是如何纠正你的问题的?

于 2010-02-01T04:25:56.753 回答
3

DateTimePicker ValueChanged 事件有问题。此页面上的每个 Microsoft Windows 窗体团队https://connect.microsoft.com/VisualStudio/feedback/details/1290685/debugging-datetimepicker-event-hangs-vs

“DateTimePicker 控件安装了鼠标钩子作为其功能的一部分,但是当调试器让 WinForms 应用程序在断点处停止时,如果 VS 碰巧收到鼠标消息,它可能会出现死锁。目前,不幸的是死锁DateTimePicker 设计的结果。当单击下拉菜单以显示日历时会安装鼠标钩子。这意味着不应在日历活动时调用的任何事件处理程序中发送断点。我们目前正在调查是否有可能解决这个问题,如果我们能够提供修复,我们将用更多信息更新这个线程。”

于 2017-02-11T17:44:13.020 回答
1

在没有看到任何代码的情况下,请尝试以下步骤:

  1. 注释掉整个事件处理程序以查看它在没有附加任何内容的情况下运行的速度。
  2. 一次取消注释一行,以查看哪些是导致最多问题的行。
  3. 分析这些方法调用。
  4. ...
  5. 利润!
于 2009-10-13T19:38:19.740 回答
0

你可以尝试几件事。摆脱 ChangedEvent 中的 DoEvents。一段时间后(thread.sleep() ?),在单独的函数中调用 doevents。

我知道 doevents 确实会导致问题,但我很少使用它。

于 2009-10-13T19:54:44.433 回答
0

事件过程ValueChanged:在sender.tag enableTimer 中设置参数并使用 sender.tag 执行参数

例子:

private void DateTimePicker_ValueChanged(object sender, EventArgs e)
    {
        DateTimePicker ThisSender = (DateTimePicker)sender;
        Timer.Tag = ThisSender.Name.ToString() + "=" + ThisSender.Value;
        Timer.Enabled = true;
    }
于 2021-01-11T10:41:28.423 回答