如何正确取消? [关闭]

Posted

技术标签:

【中文标题】如何正确取消? [关闭]【英文标题】:How to cancel properly? [closed] 【发布时间】:2013-08-15 12:33:26 【问题描述】:

在我提出问题之前,我将创建一个场景。 假设您有一个带有开始按钮的表单,然后当用户按下它时会弹出一个消息框,询问他们是否要继续,选项是是或否。 当用户按否时,程序应该停止它的工作,返回表单并清除文本框/组合框/等。

现在这是我的问题,在选择“否”后,如何阻止程序进入进一步的代码?让代码停止它正在做的事情并像什么都没发生一样返回到表单?

我希望我解释得足够清楚......

别在意我意识到我哪里错了的每个人......避免了危机。感谢您的所有意见!

【问题讨论】:

一个具体的例子来说明你正在尝试stop 会有很大帮助 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 你写过代码吗?我们需要看看你尝试了什么! 如果用户选择否,则返回; 带有确定/取消按钮的MessageBox,检查表单的MessageBoxResult,然后处理或清除您的控件。正确完成时微不足道,不正确时令人讨厌,当您不知道时是灾难性的。 【参考方案1】:

一般来说,.NET 使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且它们需要显式取消自己。

这由框架的许多部分通过CancellationTokenSource 类和CancellationToken 结构处理。

有关详细信息,请参阅 MSDN 上的Cancellation in Managed Threads。

话虽如此,如果有问题的方法直接使用MessageBox,如果结果为DialogResult.No(在Windows 窗体中)或Window.DialogResult 未设置或为假(在WPF 中),它可以返回或停止工作)。

【讨论】:

感谢您的解释!【参考方案2】:

通常你会使用模态表单,这意味着你当前的方法被阻塞并且会被阻塞直到模态表单返回。

你可以试试这样的:

        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

【讨论】:

不幸的是,因为这个方法返回一个布尔值,当我简单地说“return”时它会抱怨...... 你可以返回真/假,取决于返回值呈现什么。

以上是关于如何正确取消? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

confirm 点 取消 关闭对话框?

使用宏或 VBA 正确关闭 access 2003 中的隐藏窗口?

网址缩短器如何工作? [关闭]

2021-11-18 WinFrom面试题 如何在关闭窗体时,可以取消关闭?

html编写代码如何在关闭网页时弹出确认对话框!点击确认关闭,取消不关闭

Thread专题 - 取消和关闭