Использование фонового рабочего в ASP.NET с AJAX

У меня есть необходимость выполнить фоновую задачу, которая имеет индикатор выполнения, который показывает процент выполнения и кнопку отмены. За исключением специфики задачи, сейчас я просто хочу, чтобы пример работал, поэтому у меня есть три основных обработчика событий (DoWork, ProgressChanged и RunWorkerCompleted) и цикл, который просто увеличивает счетчик и спит в течение 50 мс в DoWork. Тем не менее, это необновить, кроме одного раза в конце.

В Windows Forms я использую Фоновый рабочий, и он работает без проблем. Я'Я хотел бы просто использовать этот же код. Тем не менее, я видел материал, который говорит, что ASP.NET должен использовать AJAX для получения той же функциональности. Итак, мои вопросы:

1) Мне действительно нужен AJAX для использования фонового рабочего?

2)Если даМне нужен AJAX, какой самый простой и простой способ для человека, который неНе знаете, что AJAX может сделать, чтобы заставить фонового работника работать на веб-странице ASP.NET?

3)Если нетЯ немне не нужен AJAX, может кто-нибудь указать мне на рабочий образец, который нене использовать это? Мне интересно, даже если он использует какой-то другой метод потоков, чем фоновые рабочие.

Извините за многочастный вопрос! Если вы можете ответить на один или другой, это будет высоко ценится. Я неЯ не против того, какой метод я использую, пока он работает.

Код для ссылки со страницы .cs:

 protected void bwProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 { 
     lblProgress.Text = "Task Complete: " + e.Result;
 }

 protected void bwProcess_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     lblProgress.Text = e.ProgressPercentage.ToString();
 }

 protected void bwProcess_DoWork(object sender, DoWorkEventArgs e)
 {
     for (int i = 0; i 
 Brandi31 окт. 2012 г., 23:33
msdn.microsoft.com/en-us/library/ms178210%28v=vs.85%29.aspx это более свежая версия. Не уверен, как адаптировать это в индикатор выполнения, но я думаю, чтоЯ медленно приближаюсь.
 Despertar31 окт. 2012 г., 20:20

Ответы на вопрос(1)

Решение Вопроса

которые легко принять как должное при программировании на рабочем столе. Переход от одного к другому может потребовать много изменений. Создание длинных потоков - одна из тех вещей, которые требуют большей осторожности, чтобы избежать ловушек. Пул приложений не знает о потоках, которые вы порождаете, поэтому, когда он перезапускается, он уничтожает эти потоки, вызывая непредвиденное поведение в вашем приложении. Смотрите этот пост для получения дополнительной информации об этом,Могу ли я использовать потоки для выполнения длительных заданий в IIS?

Это означает, что вам нужно использовать более постоянные средства для отслеживания прогресса. База данных, вероятно, была бы лучшей, но даже файл сохранялся бы после повторного использования пула.

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

function getProgress() {
    $.ajax({
        url: '/progress',           // send HTTP-GET to /progress page
        dataType: 'json',           // return format will be JSON
        success: function(result) { // function to run once the result is pulled
            $("#p1").html('Percentage: %' + result);
            if (result == "100")
                clearInterval(window.progressID);
        }
    });
}

function startGetProgress() {
    window.progressID = setInterval(getProgress, 10000); // update progress every 10 seconds
}

В приведенном выше примере используется JJuery ajax метод,http://api.jquery.com/jQuery.ajax/ поэтому вам нужно обратиться к библиотеке JQuery.

Независимо от того, используете ли вы webforms или mvc, вы можете добавить контроллер web api для обработки запроса ajax. Дайте мне знать, если вам нужно, чтобы я что-то прояснил.

 Brandi05 нояб. 2012 г., 22:00
Спасибо - какая неприятная вещь!

Ваш ответ на вопрос