如何正确取消
本文关键字:取消 何正确 | 更新日期: 2023-09-27 18:27:36
在提问之前,我将创建一个场景。假设你有一个带有开始按钮的表单,然后当用户按下它时,会弹出一个消息框,询问他们是否要继续,选项为是或否。当用户按下no时,程序应该停止执行操作,返回表单并清除文本框/组合框等。
现在我的问题是,在选择"否"时,如何阻止程序进入进一步的代码?让代码停止它正在做的事情,像什么都没发生一样返回到表单?
我希望我能很好地解释自己。。。
尽管每个人我都意识到我哪里错了。。。危机得以避免。然而,感谢您的所有投入!
通常情况下,您将使用模态表单,这意味着您当前的方法被阻止,并且将被阻止,直到模态表单返回。
你可以试试这样的东西:
DialogResult result = MessageBox.Show("Title", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
return;
如果您希望自定义窗体显示为模态,则应使用ShowDialog()而不是show(),ShowDialog将阻止执行方法的当前执行,并将设置一个临时消息循环来处理窗口消息。
类似:
using(FormQuestion form = new FormQuestion())
{
DialogResult result = form.ShowDialog();
// check the result.
}
查看此处了解更多信息:显示模态和无模态Windows窗体http://msdn.microsoft.com/en-us/library/aa984358(v=vs.71).aspx
通常,.NET使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且它们需要显式地取消自己。
这是由框架的许多部分通过CancellationTokenSource
类和CancellationToken
结构来处理的。
有关完整的详细信息,请参阅MSDN上托管线程中的取消。
也就是说,如果所讨论的方法直接使用MessageBox
,那么如果结果是DialogResult.No
(在Windows窗体中)或Window.DialogResult
未设置或为false(在WPF中),它就可以返回或停止工作。