在定时活动中关闭表格

时间:2017-01-21 14:18:43

标签: c# forms timer timed-events

我无法在'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();
    }        
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不要使用System.Timers.Timer,它会在不同的主题上调用它的事件 只需使用Windows.Forms.Timer即可。您可以在desinger表单及其Tick事件中创建它。计时器不是非常精确,但对大多数情况来说都足够好。