Трудно сказать, как именно работает ваш код сейчас, и я думаю, что ответ зависит от того, блокирует ли ваша текущая реализация пользовательский интерфейс (т. Е. Делает синхронный вызов вашей DLL БД).
Теперь, если ваш вызов DLL является синхронным и он блокирует пользовательский интерфейс, тогда, да, вы можете рассмотреть возможность использования BackgroundWorker для этой работы и позволить вашему основному потоку пользовательского интерфейса избежать зависания.Вы можете обратиться к Как мне реализовать индикатор выполнения в C #? для некоторых ответов.
Но вам все еще нужен какой-то механизм, чтобы узнать ход вашего вызова в БД, и он неПохоже, DLL пока что-то раскрывает.
Просто читая между строк вашего вопроса, звучит так, как будто у вас есть возможность изменить DLL.Если это так, то вы должны попытаться использовать шаблон, который сохраняет разделение между DLL и вашим пользовательским интерфейсом при предоставлении информации о ходе выполнения.Ваш код пользовательского интерфейса должен действительно отвечать за обновление на основе некоторых данных, которые DLL может предоставить в слабосвязанной форме.Я бы предложил использовать:
- Модель подписки, прослушивая событие, опубликованное некоторым классом в DLL;или
- Модель опроса для активного мониторинга некоторого объекта данных, реализуемого в DLL на периодической основе (например, во время обработчика Timer Tick).
В любом случае, вы хотите избежатьтесно связывая два уровня вместе, кодируя DLL, чтобы иметь глубокие знания вашего уровня пользовательского интерфейса.Обе вышеупомянутые возможности должны позволять вам сохранять код обновления пользовательского интерфейса в основном потоке пользовательского интерфейса исполняемого файла приложения в большинстве случаев, что важно, если вы хотите избежать проблем с многопоточностью.