Как стать автором
Обновить

Комментарии 9

Скачиваем и устанавливаем подходящую версию Download. Для удобной работы из среды .NET разработана обертка GhostScriptNet, которую также придется скачать. Архив распаковываем неподалеку от проекта. В архиве нас интересует сборка Ghostscript.NET.dll, которую незамедлительно подключаем к проекту

Как много действий.

Правильный путь — Install-Package iTextSharp
Разве iTextSharp позволяет рендерить PDF в картинку? Впрочем GhostScript тоже есть на nuget.org
Спасибо за наводку
Next is to convert the PDF document generated by ItextSharp to an image with Spire.Pdf.

Всё же "нет". Поскольку для рендеринга используется другая библиотека (Spire.Pdf). Но спасибо за ссылку.
Я не знаю, какую версию .NET вы используете и что подвигло вас использовать тот или иной подход к релазиации многопоточности в 2016 году но пару моментов бросились в гласа сразу:

lock (PageStore) {
   PageStore[pageNumber] = mem;
}

Зачем использовать Dictionary<int, MemoryStream>, если у Вас используется доступ по индексу, когда есть MemoryStream[] и неблокирующий доступ по индексу, а количество можно определять использую атомарный инкремент?
Ну и еще, т. к. процесс печати так же занимает определенное время стоит посмотреть в сторону блокирующих очередей (BlockingCollection в .NET 4+), Reactive Extensions и Dataflow.
Не понимаю связь между годом и многопоточностью.
Согласен, конкретно в данном примере вполне можно использовать MemoryStream[].
Про год, это я к тому, что уже есть TPL, PLINQ, async/await, различные потокобезопасные структуры данных и т. д., поэтому код, который использует ThreadPool.QueueUserWorkItem напрямую вызывает некоторые вопросы сам собой, не говоря уже о конкретном способе его использования и блокировок.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий