我想在我的应用程序无法完成工作时实现自动关闭功能。 我使用三个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;
}
问题是有时我按取消并显示另一个表格。