C# 在订阅之前调用事件处理程序

C# 在订阅之前调用事件处理程序,c#,events,constructor,C#,Events,Constructor,在此构造函数中,调用setQuickDate将触发_datesChanged事件。问题是,我不想在构造函数中调用onDatesChanged,所以我只在之后订阅它 但是onDatesChanged仍然被呼叫,我不明白为什么?是否存在仅在构造函数完成后使用的事件队列? 我怎么能避免呢 事件触发类(_日期选择器)中的相关位: public PilingLateralMenu() { ... _datepickers.setQuickDate(DatePickersRange.Quic

在此构造函数中,调用setQuickDate将触发_datesChanged事件。问题是,我不想在构造函数中调用onDatesChanged,所以我只在之后订阅它

但是onDatesChanged仍然被呼叫,我不明白为什么?是否存在仅在构造函数完成后使用的事件队列? 我怎么能避免呢

事件触发类(_日期选择器)中的相关位:

public PilingLateralMenu()
{
    ...
    _datepickers.setQuickDate(DatePickersRange.QuickDateRange.PAST_WEEK);
    _datepickers._datesChanged += onDatesChanged;
}
public delegate void DatesChangeEventHandler(DateTime from, DateTime to);
public event DatesChangeEventHandler _datesChanged;

public DatePickersRange()
{
    ...
    _dateFrom.SelectedDateChanged += onSelectedDatesChange;
    _dateTo.SelectedDateChanged += onSelectedDatesChange;
    _quickDateSelection.SelectionChanged += onQuickDateSelectionChange;
    Content = _layout;
}

// Select a "quick date"
public void setQuickDate(QuickDateRange dateRange)
{
    _quickDateSelection.SelectedIndex = (int)dateRange;
}

// "Quick date" selected, selecting corresponding dates in the regular datepickers
    private void onQuickDateSelectionChange(object sender, SelectionChangedEventArgs e)
    {
        _quickDateSelection.IsDropDownOpen = false;

        DateTime now = DateTime.Now.Date;

        // This seems to be still called and might be the same issue, resulting in the event being fired twice
        _dateTo.SelectedDateChanged -= onSelectedDatesChange;
        _dateTo.SelectedDate = new DateTime?(now.AddDays(1));
        _dateTo.SelectedDateChanged += onSelectedDatesChange;

        switch ((QuickDateRange) (sender as ComboBox).SelectedIndex)
        {
            case QuickDateRange.TODAY:
                _dateFrom.SelectedDate = new DateTime?(now);
                break;
            case QuickDateRange.PAST_TWO_DAYS:
                _dateFrom.SelectedDate = new DateTime?(now.AddDays(-1));
                break;
            case QuickDateRange.PAST_WEEK:
                _dateFrom.SelectedDate = new DateTime?(now.AddDays(-7));
                break;
            case QuickDateRange.PAST_MONTH:
                _dateFrom.SelectedDate = new DateTime?(now.AddDays(-30));
                break;
        }
    }

private void onSelectedDatesChange(object sender, EventArgs e)
    {
        if (_dateFrom.SelectedDate != null && _dateTo.SelectedDate != null)
        {
            DateTime from = (DateTime)_dateFrom.SelectedDate;
            DateTime to = (DateTime)_dateTo.SelectedDate;
            if (from > to)
                return;
            if (_datesChanged != null)
                _datesChanged(from, to);
        }

    }