如何正确取消?

时间:2013-08-13 18:45:23

标签: c#

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

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

我希望我能够很好地解释自己......

没关系,我意识到我哪里出错了...危机避免了。感谢您的所有输入!

2 个答案:

答案 0 :(得分:2)

通常你会使用一个模态形式,这意味着你的当前方法被阻止,并且在模态表格返回之前将被阻止。

您可以尝试这样的事情:

        DialogResult result = MessageBox.Show("Title", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if (result == DialogResult.No)
            return;

如果您希望自定义表单显示为模态,则应使用ShowDialog()而不是Show(),ShowDialog将阻止执行方法的当前执行,并将设置临时messageloop以处理窗口消息。

像:

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

答案 1 :(得分:0)

通常,.NET使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且需要明确取消自己。

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

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

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