如何正确取消

本文关键字:取消 何正确 | 更新日期: 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中),它就可以返回或停止工作。