如何正确取消? [关闭]
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”时它会抱怨...... 你可以返回真/假,取决于返回值呈现什么。以上是关于如何正确取消? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用宏或 VBA 正确关闭 access 2003 中的隐藏窗口?
2021-11-18 WinFrom面试题 如何在关闭窗体时,可以取消关闭?