Страница 1 из 1

Неадекватное поведение ProgressOfRendering

Добавлено: 03 апр 2013, 11:00
jil
Доброе время суток!

На днях переделал формирование отчета в потоки, для их асинхронного формирования. Все работает вроде как надо, за исключением нескольких не ясных моментов.

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

Формирование отчета:

Код: Выделить всё

....
                Report = new StiReport();
                Report.Load(fn);
....
                _lastState = "Формирование отчета";
                Report.Render();
                _lastState = "Формирование отчета завершено";
                _done = true;
....
Получение состояния формирования:

Код: Выделить всё

        public string GetState() {
            var p = Report == null ? 0 : (_done ? 100 : Report.ProgressOfRendering);
            return "{ \"progress\": " + p + ", \"msg\": " + JsonConvert.SerializeObject(_lastState) + " }";
        }
На стороне клиента (ajax/javascript) идет последовательный опрос метода GetState(), и когда он возвращает progress=100, происходит переадресация на страницу отчета. Объект формируемого отчета, без сохранения и обработки передается в просмотрщику.

Код: Выделить всё

    protected void Page_Load(object sender, EventArgs e) {
....
            Viewer.Report = r.Report;
    }
Сам компонент:

Код: Выделить всё

<%@ Register Assembly="Stimulsoft.Report.Web, Version=2012.3.1500.0, Culture=neutral, PublicKeyToken=ebe6666cba19647a"
    Namespace="Stimulsoft.Report.Web" TagPrefix="cc1" %>
....
    <cc1:StiWebViewer ID="Viewer" runat="server" Width="100%" GlobalizationFile="/Localization/ru.xml"
        RenderMode="AjaxWithCache" ImagesPath="/_images/Stimulsoft/" ToolbarAlignment="Center"
        ImageFormat="Png" AllowBookmarks="False" AllowPrintBookmarks="False" ShowBookmarksButton="False" />
-----------

А теперь вопрос/проблемы:
  • * Свойство Report.ProgressOfRendering добирается до 99, никогда не получалось 100. Даже когда отчет фактически показывался на экран.
    * После формирования отчета (Report.ProgressOfRendering == 99), отчет продолжает висеть фактически х2 вермени потраченного на предыдущие 99% "времени".
Вопрос: как узнать прогресс от 0 до 100% ВСЕГО времени формирования?
Я читал в параллельных ветках о событиях Rendering и др., однако не понял чем из использование по сути отличается от свойства ProgressOfRendering.

Re: Неадекватное поведение ProgressOfRendering

Добавлено: 04 апр 2013, 10:56
HighAley
Здравствуйте.

К сожалению, данный индикатор показывает примерное значение.
Задержка на 99% скорее всего происходит из-за включенного кэширования, когда, например, в пост-процессинге происходит расстановка страниц.
Для получения информации о готовности отчёта лучше использовать какой-нибудь флаг, например, _done.

Спасибо.