使用计时器实现AutoShutDown

时间:2013-12-13 14:53:07

标签: .net winforms

我想在我的应用程序无法完成工作时实现自动关闭功能。 我使用三个System.WindowForm.Timer

     private void mainTimer_Tick(object sender, EventArgs e)  //mainTimer 1 sec period
    {
        doWork();
        .....
        if(noItems && checkBoxShutDow.Checked)
            this.Autoshutdown();
    }

在AutoshutDown中,我在5秒后显示一个表格并开始计算59,58 ... 0,除非我按下取消。 如果我按取消,则取消选中checkBoxShutDow并中止ShutDown。

    bool autoshutStarted;
    private void Autoshutdown()
    {
        var timer = new System.Windows.Forms.Timer() { Enabled = true, Interval = 5000 };
        timer.Tick += delegate
        {
            if(!checkBoxShutDow.Checked)
               return;
            autoshutStarted = true;
            AutoCloseFrm frm = new AutoCloseFrm();
            if(frm.ShowDialog(this) == DialogResult.OK)
              Process.Start("ShutDown", "/s"); 
            else
                checkBoxShutDow.Checked=false;
            autoshutStarted = false;
            timer.Dispose();
        };
    }

AutoCloseFrm是一种模式形式,每秒显示一条消息,并在counter = 60时返回DialogResult.OK。如果我想中止,它有一个取消按钮返回DialogResult.Cancel。

   private void timer_Tick(object sender, EventArgs e)
   {
        sec++;
        lblShutMsg.Text = "Automatic Shutdown in " + (60 - sec) + " seconds";
        if(sec >= 60) DialogResult = DialogResult.OK;
    }

问题是有时我按取消并显示另一个表格。

0 个答案:

没有答案