Закрытие формы во времени

Я не могу закрыть форму "frmDOOR" в OnTimeEvent.

frmDOOR close = new frmDOOR
close.close();

Это не работает. Это даже заставляет timedevent повторяться, хотя у меня есть автосброс, установленный в false. Надеюсь, вы поймете, что я делаю неправильно, это сводит меня с ума!

public partial class frmDOOR : BASEFORM
{
    public frmDOOR()
    {
        InitializeComponent();
        System.Timers.Timer aTimer = new System.Timers.Timer();
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Interval = 1000;
        aTimer.AutoReset = false;
        aTimer.Enabled = true;           
    }

    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {                
        frmUser regform = new frmUser();
        regform.StartPosition = FormStartPosition.CenterParent;            
        regform.ShowDialog();
    }        
}

2 ответа

Решение

Если вы хотите закрыть текущий экземпляр вашей формы, просто обратитесь к нему с помощью this (это даже не нужно, так как вы вызываете его собственные методы).

Используйте System.Windows.Forms.Timer для преодоления проблем с несколькими потоками.

System.Windows.Forms.Timer aTimer = new System.Windows.Forms.Timer();

public frmDOOR()
{
    InitializeComponent();
    aTimer.Tick += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 1000;
    aTimer.Enabled = true;           
}



private static void OnTimedEvent(object source, EventArgs e)
{                
    this.Close();
    // or even shorter just Close();
    // let's stop the timer as well
    aTimer.Stop();

    frmUser regform = new frmUser();
    regform.StartPosition = FormStartPosition.CenterParent;            
    regform.ShowDialog();
}

Не используйте System.Timers.Timer, он вызывает свое событие в другом потоке.
Просто используйте Windows.Forms.Timer, Вы можете создать его в форме desinger, а также его Tick событие. Таймер не очень точный, но в большинстве случаев достаточно хорош.

Другие вопросы по тегам