Вильдар, в точку!
По коду:
Убери, пожалуйста, спойлер. Очень сложно с телефона его раскрыть
. Где-то было уже, что Александр Наумович рекомендовал меньше 500 строк под спойлер не прятать и вообще не злоупотреблять этим. Без логина, например, под спойлер не заглянуть.
PartData реализует интерфейс IDisposable. Зачем это сделано и что происходит в его методе Dispose - мне не ясно, т.к. там идёт работа с нативными объектами. Но я на всякий случай упаковываю использование в конструкцию using.