Выполнение длительных операций в библиотеке классов и обратный отчет о ходе выполнения

#vb.net #backgroundworker

#vb.net #backgroundworker

Вопрос:

Мое приложение подключается к базе данных SQL, возвращает все строки из таблицы, а затем перебирает каждую строку и выполняет некоторую обработку.

Если бы это было приложение с графическими формами, я бы рассмотрел возможность выполнения вышеуказанного в BackgroundWorker, чтобы пользовательский интерфейс не задерживался, и сообщал о ходе выполнения или отмене поддержки из BackgroundWorker.

Поскольку я могу выполнять одни и те же / похожие операции во многих приложениях, я хотел бы упаковать работу SQL в библиотеку классов и вызвать ее из других моих приложений.

Я понимаю, что потенциально я мог бы использовать BackgroundWorkers и в библиотеке классов, но как мне связать пользовательский интерфейс и вызов с библиотекой? Как я могу по-прежнему отправлять запросы на отмену или сообщать о ходе резервного копирования? Или это вообще неправильный маршрут?

Комментарии:

1. BackgroundWorker получает контекст потока, в котором он был запущен, и использует его для выполнения синхронизации с этим потоком. Таким образом, он автоматически связывается с пользовательским интерфейсом (даже если он находится в отдельном классе), пока вы запускаете его из потока пользовательского интерфейса.

Ответ №1:

Хотя вы можете использовать BackgroundWorker в библиотеке классов, это кажется странным использованием для нее, поскольку она в первую очередь разработана как дополнительный компонент для пользовательских интерфейсов. Вы также могли бы управлять потоками напрямую, но в любом случае вам все равно нужно придумать какой-то способ сообщить о ходе выполнения и разрешить отмену. Хотя вы, очевидно, вольны создавать для этого свой собственный шаблон, в основном для .NETсуществует три стандартных шаблона.

Если вам действительно не нужен контроль более низкого уровня IAsyncResult , безусловно, самым популярным шаблоном, который все используют в эти дни, является TAP (задача / асинхронность / ожидание). При использовании TAP существует стандартный способ предоставления прогресса и отмены. Смотрите официальную документацию для получения дополнительной информации по обоим из них (в этом документе есть разделы для обеих этих тем).