OP:
используется стандартная диалоговая форма файла. Это предназначено для пользователя, чтобы открыть файл .xlsx, и это исключение возникает всякий раз, когда они пытаются открыть любой другой тип файла
Звучит так, как будто вы просто хотите обработать условие изящно, когда пользователь каким-то образом выбирает файл, который не является файлом Excel и / или поврежден.
Измените ваш код на что-то вроде:
private void import_begin(System.Object sender, System.ComponentModel.DoWorkEventArgs args)
{
// unpack the arguments
System.String filename = (System.String)arguments[0];
// you probably should inspect the file extension in `filename` to see if it
// is at least .xls or .xlsx prior to using Controller
try
{
Controller.Excel excel = new Controller.Excel(filename);
...
}
catch (InvalidDataException ex)
{
// gracefully handle the error
...
}
catch (Exception ex)
{
// eat, don't want thread to unwind
}
}
Теперь, если они выбирают любой другой тип файла или файл поврежден в Excel, выше будет вызван обработчик catch
, где вы можете корректно обработать ситуацию.
Обычно вам не нужно обновлять пользовательский интерфейс у работника, но MessageBox
имеет это собственный насос сообщений.
Совет
Чтобы сохранить его аккуратным, вы можете проверить расширение файла перед запуском BackgroundWorker
. Это быстрая проверка на быстрый выигрыш, и все действия, связанные с пользовательским интерфейсом, хранятся в главном потоке, а не в дочернем потоке, где все становится более сложным.