BackgroundWorker
が未処理の例外を食べてプロパティに渡すことを知っています。RunWorkerCompleted
e.Error
例外を処理する正しい方法は、チェックすることe.Error != null
です。
DoWork
イベントのメソッドにはいくつかのtry
catch
ブロックがありますが、機能しているのはそのうちのいくつかだけFailedOperationException
です。コードが unaviable な dll のクラスにアクセスしようとすると、FileNotFoundException
neighterFileNotFoundException
またはException
catch ブロックによってキャッチされないクラスがスローされます。その代わりに、 のe.Error
プロパティに移動しますRunWorkerCompleted
。
一部の例外のみがキャッチされるのはなぜですか?
コード:
try
{
SqlConnection connection = new SqlConnection(Properties.Settings.Default.CharityConnectionString);
String dataSource = connection.DataSource;
if (((ActionType)e.Argument) == ActionType.Backup)
{
try
{
lblWait.Text = "Starting backup operation ...";
ServerConnection serverConnection = new ServerConnection(dataSource);
Server sqlServer = new Server(serverConnection); // The exception is thrown here
String originalBackupPath = fileName;
BackupDeviceItem backupDevice = new BackupDeviceItem(originalBackupPath, DeviceType.File);
Backup backup = new Backup();
backup.Action = BackupActionType.Database;
backup.Database = "Charity";
backup.Devices.Add(backupDevice);
backup.Initialize = true;
backup.Checksum = true;
backup.ContinueAfterError = true;
backup.Incremental = false;
backup.LogTruncation = BackupTruncateLogType.Truncate;
backup.SqlBackup(sqlServer);
MessageBox.Show("Backup was successfull", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (FileNotFoundException ex) // this catch doesn't work for FileNotFoundException exceptions
{
MessageBox.Show("Error in operation" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (FailedOperationException)
{
MessageBox.Show("Access to the selected folder is denied", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception) // and this catch doesn't work for FileNotFoundException, too
{
MessageBox.Show("Error in operation", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
catch(Exception)
{
MessageBox.Show("Error in operation", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
「ファイルまたはアセンブリを読み込めませんでした。Microsoft.SqlServer.ConnectionInfo 」というFileNotFoundException
メッセージが表示されるのは、. アセンブリのプライベート インストールによってこの例外を解決する方法を知っています。e.Error