Try / Catch中的C#返回语句不停止程序

时间:2017-08-29 15:00:23

标签: c# return try-catch

我使用Web浏览器对象创建了一个Windows窗体项目。我创建了一种从CSV文件读入列表的方法。填充列表并加载表单后,列表中的第一项将显示在网站的文本框中。

我使用try / catch块来执行错误处理。我注意到如果文件已经打开,它会显示消息框,但是一旦我关闭消息框,代码就会继续运行。

当浏览器导航到网页时,它会抛出一个Argument Out of Range Exception。

代码继续运行是否正确。我应该在将Web浏览器导航到网站之前添加其他错误处理吗?

提前谢谢。

private void LoadAccounts()
{
        if (!File.Exists(path))
        {
            MessageBox.Show("File Doesn't Exist");
        }

            try
            {
                using (StreamReader reader = new StreamReader(path))

                    while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    string[] accountinfo = line.Split(',');
                    accounts.Add(new WaterAccount(accountinfo[0], accountinfo[1], accountinfo[2],accountinfo[3],string.Empty, string.Empty));
                }

            }

            catch (IOException ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

 }

编辑以下是调用LoadAccounts

的代码块
public FormWRB()
{
        InitializeComponent();
        LoadAccounts();
        webBrowserWRB.Navigate("https://secure.phila.gov/WRB/WaterBill/Account/GetAccount.aspx");
        buttonExport.Enabled = false;
}

1 个答案:

答案 0 :(得分:0)

try catch语句不会阻止程序运行,它只是为您提供了处理异常的机会。最常见的是记录异常。 基本上你的代码正在尝试运行一个代码块,如果它捕获IOException然后在消息框中显示错误消息,则返回只是终止方法的执行。

这是一个可以为您服务的解决方案。

    private void LoadAccounts()
    {
        if (!File.Exists(path))
        {
            throw new FileNotFoundException($"{path} does not exist");
        }

        using (StreamReader reader = new StreamReader(path))
        {
            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                string[] accountinfo = line.Split(',');
                accounts.Add(new WaterAccount(accountinfo[0], accountinfo[1], accountinfo[2], accountinfo[3], string.Empty, string.Empty));
            }
        }
    }

然后在处理LoadAccounts()

的代码块中
    try
    {
        LoadAccounts();
        webBrowserWRB.Navigate("https://secure.phila.gov/WRB/WaterBill/Account/GetAccount.aspx");
        buttonExport.Enabled = false;
    }
    catch (FileNotFoundException ex)
    {
        // Do stuff when file not found here...
    }
    catch (IOException ex)
    {
       // Handle other exceptions here
    }

参考文献: return - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/return try catch - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch