c# - 更改两个相关 DateTimePickers 的值时如何防止 StackOverflow 错误?

标签 c# .net winforms stack-overflow

我有三个 DateTimePicker,其中之一是开始日期和结束日期之间的间隔。在部分代码中,我更新了 startdate.Valueenddate.Value,它们的 ValueChanged 事件更新了 interval.Value.

DateTimePickers

interval 中的值不需要手动更改时,一切正常。但是当我需要手动更改它时,它会导致 StackOverflow 异常,因为当设置 final.Value 时,它会导致间隔的 ValueChanged 事件触发器,它会更改 final.Value,等等。

这是 startdateenddate 的 ValueChanged 处理程序:

    private void dates_ValueChanged(object sender, EventArgs e)
    {
        if (startdate.Value < enddate.Value)
        {
            TimeSpan diff = enddate.Value - startdate.Value;
            DateTime newInterval = new DateTime(startdate.Value.Year, startdate.Value.Month, startdate.Value.Day, diff.Hours, diff.Minutes, diff.Seconds);
            if (interval.Value != newInterval)
                interval.Value = newInterval;
        }
    }

这是 interval 的 ValueChanged 处理程序,它会导致 StackOverflow 异常:

    private void interval_ValueChanged(object sender, EventArgs e)
    {
        int seconds = intervaloDP.Value.Hour * 3600 + intervaloDP.Value.Minute * 60 + intervaloDP.Value.Second;
        finalDP.Value = finalDP.Value.AddSeconds(seconds);
    }

有没有办法更改此代码并使其按照我需要的方式工作?

最佳答案

确保始终存在退出条件:

var dtm = startDP.Value.AddSeconds(seconds);
if (dtm != finalDP.Value)
    finalDP.Value = dtm;

这样,如果没有更改,事件就不会触发。

更新:更改了代码,以便将秒添加到 startDP,而不是 finalDP。

关于c# - 更改两个相关 DateTimePickers 的值时如何防止 StackOverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16238860/

相关文章:

c# - 如何为 TCP/IP 事务计时

c# - 如何从多个托管应用程序的大对象堆 LOH 中取回未使用的内存?

c# - C# 结构中的 INotifyPropertyChanged

c# - 同时接收 PictureBox 和 DataGridViewImageCell 的函数

c# - 如何避免 "dynamic"事件订阅中的匿名方法?

c# - 将非常小的数字字符串转换为十进制

c# - ZeroMQ PUB/SUB 模式与多线程轮询取消

.net - 转义 SQL 查询 - 支持 .Net 中的不同数据库平台

c# - 在 WebBrowser 控件中禁用 JavaScript 错误

c# - 通过 ODBC 执行参数化 SQL 存储过程