Я пишу веб-приложение, и иногда процесс запускается в течение нескольких секунд. В этом случае мне нужно обновить страницу, чтобы показать, что процесс все еще работает. то есть вызов базы данных и т. д., однако, я не могу получить элемент управления для обновления несколько раз. Например, метка для обновления каждую секунду, т. Е. Стадия 1, стадия 2 и т. Д. (Чисто для проверки прочитанного кода - это хранимая процедура, которая возвращает результат)
Я обернул элементы управления внутри обычной панели обновлений с помощью диспетчера сценариев на странице, я попытался связать элемент управления кнопки в качестве триггера с панелью обновления, однако я могу только когда-либо показать конечный результат. например, я установлю label.text = "case 1" и тем же методом для проверки задержки на 1 секунду, а затем снова обновлю метку. Это работает в настольных средах c #, таких как WPF и т. Д., Но не в ASP.NET со страницей aspx и кодом позади.
protected async void btnTakeTime_Click(object sender, EventArgs e)
{
//Button press we await each call which in turn lets the label
await TimeTaker(1);
await TimeTaker(2);
await TimeTaker(3);
await TimeTaker(4);
await TimeTaker(5);
}
private async Task<int> TimeTaker(int setting)
{
switch (setting)
{
case 1:
LabelInfo.Text = "case 1";
break;
case 2:
LabelInfo.Text = "case 2";
break;
case 3:
LabelInfo.Text = "case 3";
LabelInfo.CssClass = "text-info";
break;
case 4:
LabelInfo.Text = "case 4";
LabelInfo.CssClass = "text-warning";
break;
case 5:
LabelInfo.Text = "case 5";
LabelInfo.CssClass = "text-warning";
break;
}
//Delay the return so we have time to see the updated label on the web page.
await Task.Delay(1000);
return 1;
}
Это просто быстрый пример, но я ожидаю, что при нажатии кнопки при вызове каждого метода он будет обновлять метку, и это можно увидеть на экране как внутри панели обновления. он достигает точек останова, как и ожидалось, но метка не обновляется до последнего метода, в результате чего для метки с новым классом css устанавливается «case 5».