2009-10-13 128 views
1

我在C#中有一个datetimepicker。当我点击它时,它会展开以显示每月日历,当我点击左箭头返回一个月时,它会更改值并调用我的活动。这个事件包含了太多的代码来包含在这里,但它调用了一些不用说的函数。
我遇到的问题是,当我点击左箭头时,它会陷入某种循环,并且在几个月中一直下降,我无法阻止它。其中一个被调用的函数包含一个Application.DoEvents(),如果我评论说它不会卡在循环中,但我需要该命令来更新接口的另一部分。任何想法为什么发生这种情况?C#DateTimePicker卡在循环中

我有时可以使用此代码复制它,有时它只是它几次,有时它会卡在循环中。

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

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

这个怎么样?您在事件处理程序中做了太多工作,特别是如果您需要调用DoEvents ... – 2009-10-13 19:33:47

+0

为什么会导致问题? – 2009-10-13 19:35:55

+0

没有DoEvents()挂起吗? – 2009-10-13 19:44:51

回答

4

我也有同样的问题。在我的情况下,不是调用DoEvents,而是更新Crystal Report视图。我发现唯一的解决方法是在CloseUp事件而不是ValueChanged或TextChanged上更新我的视图。

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

+0

我终于决定只是删除我试图显示的面板,它比功能性更多的美容原因,但我会给你的解决方案一试。谢谢。 – 2010-02-01 15:44:51

+1

+1 - 'CloseUp'事件解决了我在VB.NET项目中处理的问题。感谢您的回答! – Buggabill 2010-04-26 18:14:20

1

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

  1. 注释掉整个事件处理 来看看如何快速将其与连接到它没什么 运行。
  2. 取消注释一行一次,看 哪些是造成最多 问题。
  3. 分析这些方法调用。
  4. ...
  5. 利润!
0

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

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

+0

问题是我在事件开始时使面板可见。进行网络服务调用,然后隐藏面板。我必须在panel1.visible = true之后放置DoEvents;在调用web服务时实际获取它。 – 2009-10-13 19:58:07

0

DateTimePicker ValueChanged事件是越野车。根据此页上的Microsoft Windows窗体小组https://connect.microsoft.com/VisualStudio/feedback/details/1290685/debugging-datetimepicker-event-hangs-vs

“DateTimePicker控件将鼠标挂钩作为其功能的一部分进行安装,但是当调试程序在断点上停止WinForms应用程序时,它允许发生死锁碰巧得到一个鼠标消息,现在,不幸的是死锁是DateTimePicker设计的结果,当单击下拉菜单来显示日历时,鼠标钩子被安装,这意味着不应该在任何事件处理程序中发送断点我们正在调查是否有可能解决这个问题,如果我们能够提供修补程序,我们将更新此主题以提供更多信息。“