在定时事件中关闭窗体



我无法在"OnTimeEvent"中关闭表单"frmDOOR"。

frmDOOR close = new frmDOOR
close.close();

它不起作用。它甚至使定时事件重复,即使我将自动重置设置为 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();
    }        
}

不要使用 System.Timers.Timer ,它会在不同的线程上调用其事件。
只需使用Windows.Forms.Timer .您可以在表单desinger及其Tick事件中创建它。计时器不是很精确,但在大多数情况下已经足够了。

如果你想关闭表单的当前实例,你只需用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();
}

相关内容

  • 没有找到相关文章

最新更新