Неадекватное поведение ProgressOfRendering
Добавлено: 03 апр 2013, 11:00
Доброе время суток!
На днях переделал формирование отчета в потоки, для их асинхронного формирования. Все работает вроде как надо, за исключением нескольких не ясных моментов.
Для затравки основные куски кода. Оба куска принадлежат методам одного класса, первый часть метода потока.
Формирование отчета:
Получение состояния формирования:
На стороне клиента (ajax/javascript) идет последовательный опрос метода GetState(), и когда он возвращает progress=100, происходит переадресация на страницу отчета. Объект формируемого отчета, без сохранения и обработки передается в просмотрщику.
Сам компонент:
-----------
А теперь вопрос/проблемы:
Я читал в параллельных ветках о событиях Rendering и др., однако не понял чем из использование по сути отличается от свойства ProgressOfRendering.
На днях переделал формирование отчета в потоки, для их асинхронного формирования. Все работает вроде как надо, за исключением нескольких не ясных моментов.
Для затравки основные куски кода. Оба куска принадлежат методам одного класса, первый часть метода потока.
Формирование отчета:
Код: Выделить всё
....
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) + " }";
}
Код: Выделить всё
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% "времени".
Я читал в параллельных ветках о событиях Rendering и др., однако не понял чем из использование по сути отличается от свойства ProgressOfRendering.