2010-05-09 1 views
0

У меня возникли проблемы с созданием страницы asp.net с помощью C# При первом нажатии кнопки начинается отображение секунд с помощью элемента управления меткой. При повторном нажатии кнопки секунда останавливается.Пример System.Threading.Timer для запуска и отображения секунд, пока вы не нажмете кнопку

В настоящее время мой код делает только печатает 0 и останавливается:

System.Threading.Timer Timer; 
bool endProcess = false; 
int i = 0; 

protected void Page_Load(object sender, EventArgs e) 
{ 

    Timer = new System.Threading.Timer(TimerCallback, null, 10, 10); 
    Label1.Text = i.ToString(); 
    i++; 
} 

private void TimerCallback(object state) 
{ 

    if (endProcess == true) 
    { 
    Timer.Dispose(); 
    return; 
    } 
} 

public void Button1_Click(object sender, System.EventArgs e) 
{ 
    endProcess = true; 
} 
+1

Hm, так что это проблема? – Robb

+0

в настоящее время он просто показывает 0 и останавливается – EverTheLearner

ответ

1

Для этого, чтобы работать в ASP.NET, вы не должны использовать System.Threading.Timer, потому что это работает на стороне сервера, и вам нужно периодически обновлять клиентскую сторону. У вас есть несколько вариантов для приложения на основе WEB.

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

Я думаю, что лучшим вариантом было бы это полностью на стороне клиента, используя таймер javascript и обновляя элемент DOM с новым значением. Взгляните на втором и третьем примере на этой странице http://www.w3schools.com/js/js_timing.asp

4

Вы должны установить функцию label.text=i.toString(); в timecallback не page_load