Meloman19, спасибо за ответ. Под полезной работой переданной через делегат в окно я подразумеваю отрисовку к примеру какого-то элемента и т.п., т.к. отрисовка тоже занимает какое-то время. Понятно, что если делать там какую-то тяжелую логику, то окно просто зависнет на это время.
По поводу оборачивания в Task. Тут на тостере я нашел вот это — https://toster.ru/answer?answer_id=442851 ответ от пользователя mayorovp в самом низу сообщения после строчки "Последовательный запуск на фреймворке 4.0:" Там по сути, как я понял, рекурсия Task. Вроде близко и то что надо, но что-то не заводится. Да и вроде метод менее ресурсоемким не назовешь.
На примитивном примере чтении из файла — в основном потоке чтение всего файла (500 строк) занимает допустим 5 сек. А обработка каждой строки занимает в среднем 1 мин. В основном потоке надо просто прочитать и пойти дальше, а обработку отдать другому или нескольким отдельным потокам.
Понятно что тут самое простое как два пальца .... это все в одном потоке запустить, но в целях познания потоков и их взаимодействий, надо решить именно вышеизложенную проблему.
PS. Немного ясности. Задача не прочитать файл до конца, а затем начать обработку строк. В теории файл может быть вообще бесконечный. Поэтому обрабатывать строки в отдельном потоке надо начать сразу же после прочтения первой строки из файла.
По поводу оборачивания в Task. Тут на тостере я нашел вот это — https://toster.ru/answer?answer_id=442851 ответ от пользователя mayorovp в самом низу сообщения после строчки "Последовательный запуск на фреймворке 4.0:" Там по сути, как я понял, рекурсия Task. Вроде близко и то что надо, но что-то не заводится. Да и вроде метод менее ресурсоемким не назовешь.