Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#日期时间选择器卡在循环中_C#_Datetimepicker - Fatal编程技术网

C#日期时间选择器卡在循环中

C#日期时间选择器卡在循环中,c#,datetimepicker,C#,Datetimepicker,我在C#有一个约会时间选择器。当我单击它时,它会展开显示月历,当我单击左箭头返回一个月时,它会更改值并调用我的事件。事件包含的代码太多,无法包含在此处,但它调用了多个函数(不用说)。 我遇到的问题是,当我点击左箭头时,它会陷入某种循环,并在几个月内不断下降,我无法阻止它。正在调用的其中一个函数包含一个Application.DoEvents(),如果我对此进行注释,它不会卡在循环中,但我需要该命令来更新接口的另一部分。知道为什么会这样吗 有时我可以用这段代码复制它,有时它只是做了几次,有时它被卡

我在C#有一个约会时间选择器。当我单击它时,它会展开显示月历,当我单击左箭头返回一个月时,它会更改值并调用我的事件。事件包含的代码太多,无法包含在此处,但它调用了多个函数(不用说)。
我遇到的问题是,当我点击左箭头时,它会陷入某种循环,并在几个月内不断下降,我无法阻止它。正在调用的其中一个函数包含一个Application.DoEvents(),如果我对此进行注释,它不会卡在循环中,但我需要该命令来更新接口的另一部分。知道为什么会这样吗

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

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

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

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

  • 注释掉整个事件处理程序 看看它在没有任何东西的情况下跑得有多快 附属于它
  • 一次取消一行注释以查看 哪些是最主要的原因 问题
  • 分析这些方法调用
  • 利润
    你可以试试看。清除ChangedEvent中的DoEvents。 可能在一段时间后(thread.sleep()?)调用单独函数中的doevents


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

    我也有同样的问题。在我的例子中,我不是调用DoEvents,而是更新Crystal报告视图。我找到的唯一解决方法是在特写事件时更新我的视图,而不是ValueChanged或TextChanged


    Scott,您最终是如何解决问题的?

    DateTimePicker ValueChanged事件有问题。此页面上的每个Microsoft Windows窗体团队:


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

    事件过程
    值已更改
    : 在
    sender.tag中设置参数
    使用sender.tag启用计时器并执行参数

    示例:

    private void DateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            DateTimePicker ThisSender = (DateTimePicker)sender;
            Timer.Tag = ThisSender.Name.ToString() + "=" + ThisSender.Value;
            Timer.Enabled = true;
        }
    

    这是怎么回事?你在事件处理程序中做了太多的工作,特别是当你需要调用DoEvents时…为什么会导致问题?没有DoEvents()它会挂起吗?@henk他说:正在调用的一个函数包含一个应用程序。DoEvents()如果我把它注释掉,它就不会卡在循环中,但我需要该命令来更新界面的另一部分。知道为什么会发生这种情况吗?这不是DoEvents命令特有的。如果我将listView1.Clear()移动,DoEvents命令注释掉在我的web服务调用之后,它会导致相同的问题,但在它正常工作之前。问题是我在事件开始时使面板可见。执行web服务调用,然后隐藏面板。我必须将DoEvents放在panel1.visible=true;之后,才能在调用web服务时实际显示它。我最终决定使用just删除我试图显示的面板,与其说是功能,不如说是外观上的原因,但我会尝试一下您的解决方案。谢谢。+1-在VB.NET项目中,
    特写
    事件解决了我的问题。谢谢您的回答!