有没有更好的方式来处理用户选择退出的WinForms程序比这之后做一些任务:
在这种情况下,有形式没有控制盒 :[编辑1 响应由“NoBugz评论 ],并有用于把一个间接层中,当用户选择关闭窗体[/编辑1]会发生什么原因
[编辑2: 响应所有评论为北京时间18:35的1月20日 ] 也许使用淡出MainForm的是 ,你可能想要做的应用有什么简单的例子被关闭:用户不能与交互:这是不言自明与用户决定终止应用程序。 [/编辑2]
(使用某种形式的线程的?)(启示多线程应用程序吗?)(这段代码“臭”?)
// 'shutDown is an external form-scoped boolean variable
//
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// make sure we don't block Windows ShutDown
// or other valid reasons to close the Form
if (e.CloseReason != CloseReason.ApplicationExitCall) return;
// test for 'shutDown flag set here
if (shutDown) return;
// cancel closing the Form this time through
e.Cancel = true;
// user choice : default = 'Cancel
if (MessageBox.Show("Exit Application ?", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.OK)
{
// user says Exit : activate Timer, set the flag to detect Exit
timer1.Enabled = true;
shutDown = true;
}
}
摘要:在一个非常标准的WinForms应用程序(MainForm的一个Program.cs中推出以标准方式):在MainForm中的的FormClosing事件处理程序:
立即退出(触发默认行为:这是关闭MainForm,然后退出应用程序),如果:
一种。 该CloseReason是任何其他CloseReason.ApplicationExitCall
湾 如果一个特殊的布尔变量设置为true,或
如果不立即退出:取消了“第一个电话”来的FormClosing。
然后用户做出选择,通过MessageBox.Show对话框,退出应用程序,或取消:
一种。 如果用户取消,当然,应用程序保持“原样”。
湾 如果用户已选择了“退出:
设置特殊布尔标志变量设置为true
运行一个定时器,做一些特别的东西。
当计时器代码的内部测试检测“特别的东西”完成后,它会调用Application.Exit