У меня есть приложение с длительной обработкой кода. Я думал о запуске долго время обработки путем вызова из яваскрипта страницы,индикатор выполнения с использованием нескольких вызовов ajax для asp.net
function OnCopy(type){
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
//window.clearInterval(interval_handler);
alert('done');
}
}
xmlhttp.open("GET", "<%=Request.Path %>?copy=" + type, true);
xmlhttp.send();
interval_handler = window.setInterval(OnCheckStatus, 1000);
}
Последняя строка этой функции будет запустить таймер, чтобы проверить каждый второй статус:
function OnCheckStatus(){
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
//window.clearInterval(interval_handler);
//var result = eval(xmlhttp.responseText);
//var pb = document.getElementById('progressbar_' + result[0]);
//if(pb != null)
// pb.innerHTML = result[1] + ' % - ' + result[2];
debug++;
var pb = document.getElementById('progressbar_test');
pb.innerHTML = debug;
}
}
xmlhttp.open("GET", "<%=Request.Path %>?checkstatus=1", true);
xmlhttp.send();
}
На код позади меня эта длинная функция обработки времени и проверить функцию состояния:
private void Copy(string type)
{
Application["ProgressBar.Type"] = type;
for (int i = 0; i < 100; i++)
{
System.Threading.Thread.Sleep(100);
Application["ProgressBar.Value"] = i.ToString();
}
Application["ProgressBar.Type"] = null;
Application["ProgressBar.Value"] = null;
}
private void CheckStatus()
{
Response.Clear();
string type = (string)Application["ProgressBar.Type"];
string value = (string)Application["ProgressBar.Value"];
if (type == null) type = "";
if (value == null) value = "";
string response = "['" + type + "','" + value + "','" + DateTime.Now.ToString("HH:mm:ss") + "']";
Response.Write(response);
Response.End();
}
Теперь, проблема в том, что до тех пор, функции копирования не закончена, нет ответа на функцию CheckStatus из кода позади (я думаю, что все вызовы поставлены в очередь), но когда это будет завершено, отображаемое значение отладки начнется с 10, прямо, как и все ответы для этих 10 звонков идут одинаково время. Как ASP.NET реагирует только на один вызов только за раз, из браузера. У меня создалось впечатление, что сервер будет обрабатывать как минимум 2 вызова одновременно из одного и того же браузера.
Помогите мне с этим, пожалуйста?
Я пробовал использовать потоки, но у меня были ошибки доступа к безопасности, так как мой код (а не фиктивная часть, которую я написал) пытается скопировать некоторые файлы и установить права безопасности. Работа из потока страниц работает, но не из другого потока. - – user2976982