通常用在类中处理异常,替代直接弹窗,使UI层可以统一处理异常。

定义异常操作类,通常与需要报告异常的类定义在同一文件。

/// <summary>
/// SVN操作异常类
/// </summary>
public class SvnOperationException : Exception
{
    public SvnOperationException(string message, Exception inner) : base(message, inner) { }
}

在需要报告异常的类中实现抛出异常。

public void TortoiseSVN_ShowLog(string projectName)
{
    string url = GenerateSvnUrl(projectName); // 修改为调用新方法
    try
    {
        System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
        {
            FileName = "TortoiseProc.exe",
            Arguments = $"/command:log /path:\"{url}\"",
            UseShellExecute = true
        });
    }
    catch (Exception ex)
    {
        throw new SvnOperationException($"无法启动TortoiseSVN日志窗口", ex);
    }
}

UI层实现异常的报告:

try
{
    _svnOperator.TortoiseSVN_ShowLog(projectName);
}
catch (Exception ex)
{
    MessageBox.Show($"异常: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}

如此便实现了UI层弹窗报告错误信息:

异常: 无法启动TortoiseSVN日志窗口