Я пытаюсь создать страницу asp.net (c #), которая обновляет некоторые тексты состояний каждую секунду.
Теперь я реализовал кнопку, которая вызывает другой PageMethod, который перезапускает что-то и занимает немного времени. Проблема в том, что когда я вызываю перезапуск PageMethod, обновление PageMethod не может обновляться, пока продолжается метод перезапуска ...
Я написал небольшой пример, чтобы показать, что я имею в виду:
WebMethods на моей странице:
[WebMethod]
public static string Update()
{
//return "a" to see when the Update PageMethod succeeded
return "a";
}
[WebMethod]
public static string Restart()
{
//the restart will take a while
Thread.Sleep(2000);
//return "a" to see when the Restart PageMethod succeeded
return "a";
}
HTML-элементы для обновления:
<p id="update" style="float:left;"></p>
<p id="restart" style="float:right;"></p>
Pagemethod вызывает:
callUpdate()
function callUpdate() {
PageMethods.Update(function (text) {
//itself+text from pagemethod
$('#update').text($('#update').text() + text);
});
setTimeout(callUpdate, 1000);
}
callRestart()
function callRestart() {
PageMethods.Restart(function (text) {
//itself+text from pagemethod
$('#restart').text($('#restart').text() + text);
});
setTimeout(callRestart, 1000);
}
Примечание. Обновление также вызывается каждую секунду после его завершения, просто чтобы посмотреть, как оно работает
Чтобы уточнить: я хочу, чтобы PageMethods выполнялся независимо от того, что другой PageMethod завершил.
Я также пролетал над некоторыми ссылками, такими как:
http://esskar.wordpress.com/2009/06/30/implementing-iasyncresult-aka-namedpipeclientstream-beginconnect/
http://msdn.microsoft.com/en-us/library/aa480516.aspx
Но я не думаю, что это то, что мне нужно (?)
И я действительно не знаю, как это вызвать из Javascript (BeginXXX и Endxxx)
* РЕДАКТИРОВАТЬ: *
Что касается Массимилиано Пелусо, код js будет выглядеть так:
callUpdate()
function callUpdate() {
$.ajax({
type: "POST",
url: "ServicePage.aspx/Update",
data: "{}",
contentType:
"application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$('#update').text($('#update').text() + msg.d);
}
});
setTimeout(callUpdate, 1000);
}
callRestart()
function callRestart() {
$.ajax({
type: "POST",
url: "ServicePage.aspx/Restart",
data: "{}",
contentType:
"application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$('#restart').text($('#restart').text() + msg.d);
}
});
setTimeout(callRestart, 1000);
}
Примечание: когда я запускаю страницу с новым js, возникает та же проблема, что и раньше: метод Update ничего не может сделать, пока метод Restart не будет завершен.