如何在C#中的另一个线程上运行的循环中更新文本框

Sha*_*b78 6 c# asp.net

我正在尝试使用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++;
            }
    }
Run Code Online (Sandbox Code Playgroud)

文本框第一次显示一个变量,但之后没有更新,我做错了什么?我搜索过,人们建议调用Textbox.Update或Textbox.Refresh,但我认为这些已经老了,因为它们不再存在了.

谢谢

Ian*_*son 5

您不能使用服务器端代码以这种方式更新客户端值.无论如何,你似乎错过了某种暂停(例如Thread.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();
Run Code Online (Sandbox Code Playgroud)