У меня есть однопоточная программа, которая выполняет сложные, трудоемкие вычисления и сообщает о прогрессе.Многопоточный C# для гибкого графического интерфейса с комплексными вычислениями фона - async/await, TPL или оба?
методprivate void BtnExecute_Click()
{
ComplexCalculation(Object1);
ComplexCalculation(Object2);
ComplexCalculation(Object3);
}
ComplexCalculation выглядит следующим образом:
private void ComplexCalculation(Object MyObject)
{
(...do some time consuming operation on MyObject...);
WriteToTextboxGUI("50% Complete" + MyObject.Name);
(...do another time consuming operation on MyObject...);
WriteToTextboxGUI("100% Complete" + MyObject.Name);
}
В приведенном выше коде, метод WriteToTextboxGUI(string)
обновляет текстовое поле на GUI с прогрессом.
Я ищу, чтобы использовать многопоточный подход, чтобы графический интерфейс оставался отзывчивым при выполнении сложных вычислений. Я довольно много читал о BackgroundWorker
и Threads
, а затем, как это было упрощено/улучшено, когда Task
и TPL вышли на сцену с .Net 4.0, и теперь, как Async
и Await
прибыли с .Net 4.5, и хотел бы знать, если эти более новые технологии могут позволить мне переписать мое заявление (в относительно простого кода), так что он может:
- использование нескольких потоков одновременно для выполнения сложных расчетов
- отчета о прогрессе в мой GUI как и раньше
- Поддерживающий гибкий графический интерфейс по всему диапазону
Может ли кто-нибудь указать мне в направлении простого решения, которое бы удовлетворяло этим трем критериям?
P.S. Это приложение не будет работать на сервере, оно будет работать в WPF на рабочем столе.
почему бы не просто использовать фоновый рабочий? –
Будет ли BackgroundWorker инициировать поток для каждой из трех сложных задач, так что все три могут выполняться одновременно? – Caustix
3 фоновых работника могли бы .... –