Закрытие формы во времени
Я не могу закрыть форму "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
событие. Таймер не очень точный, но в большинстве случаев достаточно хорош.