如何实现动作的忽略/重试/取消模式?

时间:2011-05-25 06:06:02

标签: c# design-patterns

我有一个由C#.NET 4.0开发的两层Windows窗体应用程序。在此APP中,我读取文件内容并在Data-Access-Layer中创建实体列表,并将其返回到GUI层以在网格视图中显示。在我当前的逻辑中,如果文件中的一行已损坏或格式错误(我无法从中创建实体)或任何其他异常,我抛出异常并中止该过程。现在,我如何实现忽略/重试/取消模式?我的意思是什么是显示忽略/重试/取消对话框并执行任何用户想要的最佳方式(例如,忽略当前行并转到下一行,取消该过程,或重试当前失败的行读取)?它有什么模式吗?

1 个答案:

答案 0 :(得分:10)

在提供此类选项时,我采用以下模式:

DialogResult result = DialogResult.Retry;
while (result == DialogResult.Retry) {
    try {
        DoProcess();
        break;
    }
    catch {
        result = MessageBox.Show(errorMessage, caption, MessageBoxButtons.AbortRetryIgnore);
        if (result == DialogResult.Abort) throw;
    }
}

如果用户选择“重试”,则循环将再次运行。如果用户单击Abort,则将抛出异常(在链中进一步捕获,从而中止其余操作)。忽略将导致循环退出而不抛出异常。我想不出更简洁的方法。