C# Winform ProgressBar и BackgroundWorker

Существует несколько других вариантов в случае, если Adobe ActiveX не то, что Вы ищете (так как Acrobat должен присутствовать на пользовательской машине, и Вы не можете поставить его сами).

Для создания предварительного просмотра PDF, сначала взгляните на некоторые другие обсуждения предмета на StackOverflow:

В последних двух, я говорю о нескольких вещах, которые можно попробовать:

  • можно получить коммерческий рендерер ( PDFViewForNet, PDFRasterizer.NET , ABCPDF, ActivePDF, XpdfRasterizer и другие в других ответах...).
    Большинство довольно дорого, хотя, особенно если все Вы заботитесь о, делает простой предварительный просмотр/миниатюры.

  • В дополнение к фрагменту кода Omar Shahine, существует статья CodeProject, которая показывает, как использовать Adobe ActiveX, но это может устареть, легко поврежденное новыми выпусками, и его законность темна (в основном, это хорошо для внутреннего пользования, но Вы не можете поставить его, и Вы не можете использовать его на сервере для создания изображений PDF).

  • Вы могли взглянуть на исходный код для [1 110] SumatraPDF, средство просмотра OpenSource PDF для окон.

  • существует также Poppler, механизм визуализации, который использует Xpdf в качестве механизма визуализации. Все они являются большими, но они потребуют, чтобы изрядное количество обязательства сделать заставило их работать и взаимодействовать через интерфейс с .NET, и они имеют тенденцию быть быть распределенными под GPL.

  • можно хотеть рассмотреть использование GhostScript как интерпретатор, потому что рендеринг страниц является довольно простым процессом.
    недостаток состоит в том, что Вы должны будете или повторно упаковать его для установки его с приложением или сделаете его предпосылкой (или по крайней мере часть процесса установки).
    Это не сложная задача, и это, конечно, легче, чем необходимость массажировать другие механизмы визуализации в сотрудничество с .NET.
    я сделал маленький проект, который Вы найдете на форумы Developer Express как вложение.
    остерегаться лицензионных требований для GhostScript через.
    , Если Вы не можете уехать с тем затем коммерческим программным обеспечением, вероятно, Ваш единственный выбор.

15
задан Matthias Braun 29 March 2018 в 11:49
поделиться

3 ответа

Одна проблема в том, что вы спите 30 секунд. Обычно вы вызываете ReportProgress в различных точках вашей длительной задачи. Итак, чтобы продемонстрировать это, вы можете изменить свой код на режим сна на 1 секунду, но 30 раз - вызывая ReportProgress каждый раз, когда он завершает сон.

Другая проблема заключается в том, что вы показываете свой ProgressForm из фонового потока. Вы должны запустить его в потоке UI , но привязать к нему событие фонового рабочего ProgressChanged . Затем, когда фоновый рабочий сообщает о ходе выполнения, форма выполнения будет обновлена.

12
ответ дан 1 December 2019 в 04:17
поделиться

ReportProgress - это метод, который вам придется вызывать в своем «рабочем» методе. Этот метод вызовет событие ProgressChanged.

В вашей форме вы можете присоединить обработчик событий к событию ProgressChanged. Внутри этого обработчика событий вы можете изменить положение индикатора выполнения. Вы также можете присоединить обработчик событий к событию RunWorkerCompleted, и внутри этого обработчика событий вы можете закрыть форму, содержащую индикатор выполнения.

2
ответ дан 1 December 2019 в 04:17
поделиться

Следует отметить, что вам нужно установить

backgroundWorker1.WorkerReportsProgress = true;

, если вы хотите, чтобы фоновый рабочий процесс инициировал событие ProgressChanged, и

backgroundWorker1.WorkerSupportsCancellation = true;

, если вы хотите иметь возможность отменить рабочий поток.

] Как говорили другие, запустите f.ShowDialog () в потоке пользовательского интерфейса и используйте ProgressChanged для обновления ProgressWindow.

Чтобы заставить ProgressForm самозакрываться, в backgroundWorker1_RunWorkerCompleted вызовите f.Close (); Это означает, что долгая операция завершена, и мы можем закрыть окно.

2
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: