捕获异常并保持GUI逻辑分离

Ami*_*ble 1 .net c# exception-handling exception

在这种情况下,您如何纠正处理异常的方法?最初,我希望以下列方式使用trycatch将捕获上载失败时助手类抛出的异常.

我的目标是返回"false"并打开一个Messagebox,并显示错误消息,我将从我的上传尝试中取出HTML响应.我试图这样做,而不是采取不好的做法,并将GUI代码放入我的助手类.

        try
        {
            // returns bool
            successful = UploadHelper.Upload(uploadToPath, File.ReadAllBytes(uploadFromPath), properties);
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
Run Code Online (Sandbox Code Playgroud)

助手班:

    public static bool Upload(string webUrl, string documentName, byte[] bytes, Dictionary<string, object> metaInfo, out string result)
    {
        try
        {
            using (WebClient webClient = new WebClient())
            {
                //result is HTML string containing data
                result = Encoding.UTF8.GetString(webClient.UploadData(webUrl + "/_vti_bin/_vti_aut/author.dll", "POST", data.ToArray()));

                // if fails throw exception
                if (result.IndexOf("\n<p>message=successfully") < 0)
                    throw new Exception(result);
            }
        }
        catch (Exception ex)
        {
            result = ex.Message;

            // Upload failed
            return false;
        }
        // Upload succeeded
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

这个稍微类似的问题让我想到我可以用自定义异常解决这个问题.然而,阅读这些创建它们的解释使我对如何使用它们来解决这种情况感到困惑 - 因为它似乎只是将Messagebox代码移动到Exception类,这对它来说也不是一个好地方.

我很确定这种情况下我无论如何都有理由使用自定义异常,因为用户可以根据返回的错误消息解决问题.所以我总是从前面提到的指南中写出来(为简单起见,省略了代码示例).

Dav*_*d M 5

如果你只是想在UI中显示异常的消息,而你的catch块只是为了获取消息,为什么要在这里捕获它?如果处理在UI中,那么将其捕获(或靠近那里),然后抓住并在该级别显示消息.

在这种情况下,您通常会使用异常处理来获取特定异常并从中提取信息以便以特定方式报告(将错误消息抽象为下面的Charleh注释),或者驱动某种自动重试逻辑.但是Upload如果一个名为抛出异常的方法,如果它无法上传某些东西,那绝对没有错.