Можно ли использовать background worker с отдельными библиотеками классов в одном решении
Я создавал консольное приложение,в которое недавно решил вставить графический интерфейс WinForm. Это делается в Visual Studio 2015 (C# 6.0, .NET Framework 4.5.2)
У меня есть следующий макет проекта
|-Solution
|-- GUI (Windows Application)
|-- DoStuff1 (Class Library)
|-- DoStuff2 (Class Library)
|-- DoStuff3 (Class Library)
|-- ConsoleApp1 (ConsoleApp)
|-- ConsoleApp2 (ConsoleApp)
|-- Helpers (Class Library)
Проблема теперь в том, что, хотя он работает функционально, он может в конечном итоге занять довольно много времени обработки, поэтому я начал смотреть на использование BackgroundWorker, однако все поиски до сих пор показали, как использовать это, когда вся обработка/работа выполняется в одном и том же проекте приложения Windows, а не в том случае, если они были разделены.
Кроме того, как я буду сообщать о прогрессе из моей библиотеки классов обратно в мой графический интерфейс, что-то связанное с ReportProgress, но просто не знаю, как его настроить...
Возможно ли это, или мне нужно переместить весь код из библиотек классов в проект GUI?
3 ответа:
Лучше использовать
Task.Run
для разгрузки работы в фоновый поток, так как он более гибок и легче сочиняется с другой работой, чемBackgroundWorker
.Вы можете использовать
IProgress<T>
, чтобы сообщить о прогрессе в gui, эта запись в блоге показывает пример того, как это сделать, и сравнивает его с использованиемBackgroundWorker
.
Да, это абсолютно возможно. Вам нужно добавить ссылку на проект(Ы), который вы хотите использовать, вот и все. Вы можете рассмотреть возможность использования интерфейса для описания типа, на который вы хотите ссылаться из обоих проектов.
Поскольку ваш проект настроен как .Net 4.5.2, вы можете воспользоваться преимуществами ключевого слова
async
.Он работает независимо от типа проекта, поскольку встроен в фреймворк и поддерживает уведомитель изменений хода выполнения и операции отмены.
Взгляните сюда