在定时事件中关闭表单
Close form in a timed event
我无法在 'OnTimeEvent' 中关闭表单 "frmDOOR"。
frmDOOR close = new frmDOOR
close.close();
它不工作。即使我将 autoreset 设置为 false,它甚至会使 timedevent 重复出现。我希望你能找出我做错了什么,这让我发疯!
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();
}
}
如果您想关闭表单的当前实例,只需使用 this
引用它即可(在调用它自己的方法时甚至不需要这样做)。
使用 System.Windows.Forms.Timer 克服 cross-thread 问题。
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
。您可以在表单设计器及其 Tick
事件中创建它。计时器不是很精确,但对于大多数情况来说已经足够了。
我无法在 'OnTimeEvent' 中关闭表单 "frmDOOR"。
frmDOOR close = new frmDOOR
close.close();
它不工作。即使我将 autoreset 设置为 false,它甚至会使 timedevent 重复出现。我希望你能找出我做错了什么,这让我发疯!
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();
}
}
如果您想关闭表单的当前实例,只需使用 this
引用它即可(在调用它自己的方法时甚至不需要这样做)。
使用 System.Windows.Forms.Timer 克服 cross-thread 问题。
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
。您可以在表单设计器及其 Tick
事件中创建它。计时器不是很精确,但对于大多数情况来说已经足够了。