将我的课程中的异常传递给我的表单

时间:2012-12-12 15:39:16

标签: c# winforms

如何从我的班级中获取异常以显示为Windows错误?

这是我的班级:

public class Editcap
{
    private string _newFileName;

    public void convertFileToLibpcap(string filePath)
    {
        FileInfo fileInfo = new FileInfo(filePath);
        _newFileName = fileInfo.FullName.Replace(fileInfo.Extension, "_new") + ".pcap";
        invokeProcess(WiresharkProcesses.Editcap, string.Format("{2}{0}{2} -F libpcap {2}{1}{2}", fileInfo.FullName, _newFileName, "\""));
        deleteFile(filePath);
    }

    private void deleteFile(string filePath)
    {
        try
        {
            File.Delete(filePath);
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }

    public string getNewFileName()
    {
        return _newFileName;
    }
}

从我的表格:

该函数创建具有不同扩展名的新文件,并应删除旧文件。如果删除失败,我想在弹出窗口中显示消息错误

Editcap editpcap = new Editcap();
editpcap.convertFileToLibpcap(file.FullName);

1 个答案:

答案 0 :(得分:2)

你不需要做任何事情,例外情况会自动冒出来;这是他们的工作方式。

只需在您的主叫代码周围添加Try / Catch

try
{
    Editcap editpcap = new Editcap();
    editpcap.convertFileToLibpcap(file.FullName);
}
catch(Exception e)
{
    MessageBox.Show("There was an error deleting the file.");
}

请注意,在deleteFile方法中捕获然后重新抛出新异常不需要(实际上有些伤害)。您正在将异常的类型从更具体和信息性更强的IOException更改为不那么富有表现力的Exception,并且您还会获取大量的堆栈跟踪信息。最好从deleteFile完全删除try / catch。这也意味着您可以更改调用代码以捕获IOException而不是全局Exception。通过执行此操作,您可以针对不同的异常使用不同的catch块,允许您以不同方式对待它们(可能是一种类型崩溃,为另一种类型记录错误,向用户显示其他内容的消息等) )。