Как обновить textbox в цикле, работающем в другом потоке в C#
Я пытаюсь обновить текстовое поле, используя код позади в приложении ASP, как это:
protected void click_handler(object sender, EventArgs e)
{
Thread worker = new Thread(new ThreadStart(thread_function));
worker.Start();
}
protected void thread_function()
{
int i = 0;
while(true)
{
Textbox.Text = i.ToString();
i++;
}
}
текстовое поле показывает одну переменную в первый раз, но после этого она не обновляется, что я делаю неправильно? Я искал, и люди предлагают позвонить в Textbox.Обновление или текстовое поле.Обновите, но я думаю, что они старые, поскольку они больше не существуют.
спасибо
1 ответов
вы не можете использовать код на стороне сервера для обновления значений стороне клиента таким образом. Во всяком случае, вы, похоже, пропускаете какую-то паузу (например, поток.Sleep), поскольку в настоящее время ваш цикл будет дико выходить из-под контроля.
вам нужно изучить использование сценариев на стороне клиента (т. е. JavaScript) вместе с чем-то вроде setTimeout
:
https://developer.mozilla.org/en/docs/Web/API/window.setTimeout
вот образец: http://jsfiddle.net/PXN9K/
извинения за плохое форматирование и немного ленивое именование/рефакторинг, но я делаю это на своем телефоне.
вот код из скрипки, скопированный здесь для будущих потомков.
var i = 0;
var updateTextbox =function()
{ document.getElementById('textbox').value = '' + i; }
var update = function() {
window.setTimeout(function() {
i++;
updateTextbox();
update();
}, 1000);
};
updateTextbox();
update();