BackgroundWorkerが未処理の例外を食べてプロパティに渡すことを知っています。RunWorkerCompleted e.Error例外を処理する正しい方法は、チェックすることe.Error != nullです。
DoWorkイベントのメソッドにはいくつかのtry catchブロックがありますが、機能しているのはそのうちのいくつかだけFailedOperationExceptionです。コードが unaviable な dll のクラスにアクセスしようとすると、FileNotFoundExceptionneighterFileNotFoundExceptionまたはExceptioncatch ブロックによってキャッチされないクラスがスローされます。その代わりに、 の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