Как обновить 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();