Выполнение длинных операций в библиотеке классов и возвращение отчетов о прогрессе - PullRequest
0 голосов
/ 14 марта 2019

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

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

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

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

1 Ответ

2 голосов
/ 14 марта 2019

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

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

...