Я же еще в прошлом вопросе написал как это сделать.
Зачем 3 листа, если можно использовать один List.
И чтобы заполнить этот лист нужно всего лишь выполнить десериализацию. https://docs.microsoft.com/ru-ru/dotnet/standard/s...
даже в wpf тебе может понадобиться отсортировать данные в какой нибудь таблице - уже LINQ или SQL, ты можешь не знать синтаксис sql, но логику запросов знать должен
Это вопрос, на который нет правильного ответа.
Нужно самому попробовать, тем более в начале пути и выбрать то, что больше понравится.
Реализуй в 2 вариантах и не бойся потратить время - именно так и происходит изучение.
В цикле, где будете считать обновляйте модель, в которой должно быть свойство Progress. Дальше дело клиента - получить этот процент, опросами раз в секунду, например, обращением в get метод.
Классы не ссылаются и не наследуют интерфейс, они его реализуют, по-этому около каждого класса у Вас указана реализация.
Если хотите связи, то вместо интерфейса создайте абстрактный класс.