2010-01-21 3 views
0

Я выполняю много времени в новой теме.Статус выполнения из новой темы

ParameterizedThreadStart pts = new ParameterizedThreadStart(WorkingFoo); 
Thread thread = new Thread(pts); 

WorkingFoo выполнения задачи и следит за прогрессом шаги (он может вернуть общее число «шагов» и текущего шага).

Я хочу отобразить эту информацию в индикаторе выполнения (простой элемент управления div или ajax, я не против).

Я не хочу, конечно, визуально обновлять страницу, на которой будет отображаться прогресс.
Также я хочу уменьшить как можно больше количество обратных передач.

Так как это сделать?
Как показать текущий прогресс из новой темы на веб-странице?

Также страница, показывающая прогресс, может быть закрыта и повторно восстановлена ​​и по-прежнему получает текущий статус.

Нет jQuery пожалуйста.

ответ

2

Во-первых, Если вы не уверены, что вам нужно, не начинайте новый поток, подобный этому, с страницы или приложения ASPNET. Используйте пул потоков.

См Advantage of using Thread.Start vs QueueUserWorkItem


Что касается вашего вопроса - как получить прогресс обновления в браузере, без обновления страницы ... Я предполагаю, что вы знаете, как использовать элементы управления в ходе JQuery. В вашем вопросе рассматривается, как подключить такой контроль выполнения к серверной логике. Единственный способ сделать это - через запросы, я предлагаю ajax, от браузера к серверу.

Если бы я был вами, я бы предоставил рабочий поток для включения его статуса в ресурс на сервере - либо сеанс пользователя, либо базу данных, либо что-то в этом роде. Затем запросите запрос ajax из запроса страницы.

В сценарии REST, статус может быть доступен на

http://myserver/Application/WorkItem12345/status 

... где WorkItem12345 это идентификатор, который указывает на работника или задания, происходит асинхронно. Ведение HTTP GET на этот URL со страницы на сервер, вы получите результат в формате JSON с указанием статуса, может быть, это выглядит следующим образом:

{"message": "working", "progress":56} 

или

{"message": "completed", "progress":100} 

или

{"message": "fault", "progress":14} 

т.д.

Там должно быть приложение на сервере, который отвечает на http://myserver/Application/WorkItem12345/status и отвечает соответствующим сообщением. Эта логика состояния должна выглядеть в слоте или ресурсе, где поток Worker отправляет свой статус - все, что вы выбрали для использования, - а затем создайте объявление, чтобы вернуть JSON.


Добавление
Если вы не хотите использовать JQuery, механики одинаковы, но вы должны написать свой собственный браузер на стороне виджет пользовательского интерфейса, который может отображать обновление статуса. В простом случае это простой div с html-контентом, который показывает ответ JSON. если вы хотите стать более привлекательным, вы можете сделать его фактическим прямоугольным баром, который растет по мере продолжения работы.

Но как построить этот виджет, это тема для другого вопроса.


Смотрите также: Dino Esposito's MSDN Magazine article on the topic

+0

хорошо, я думаю, что я могу использовать пул потоков вызывают число потоков, которые могли быть запущены ограничено (только для пользователей в ограниченной роли могут получить доступ к этой странице). – kenny

+0

Извините, забыл отметить: нет jQuery, пожалуйста. – kenny

+0

Я буду использовать сеанс, чтобы сохранить статус прогресса. Что касается виджета, это не проблема. Я обработаю его. Мне нужно больше объяснений относительно запросов AJAX. – kenny