我使用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;
}
答案 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