0

可能重复:
asp.net 使用多线程更新 UI

我开始了一个线程在后台处理。我想在完成过程后更改页面上的标签。

但我的价值没有改变。

我的样本:

    protected void Page_Load(object sender, EventArgs e)
    {
         new Thread(() => ActionStart()) { IsBackground = true }.Start();
    }
    bool _shouldStop = false;

    public void ActionStart()
    {
        while (!_shouldStop)
        {
            // ....

            requestStop();
        }

        //thread finished
        ChangeValue();

    }
    private void ChangeValue()
    {
        lab.Text = "Changed";
    }

    private void requestStop()
    {
      _shouldStop = true;
    }
4

1 回答 1

1

恐怕在线程上运行此代码对您没有帮助,因为考虑到页面生命周期,您无法确保线程在为时已晚之前完成。通常,最后一次更改控件值的机会是它的PreRender事件,但这取决于它是如何开发的。

但是,如果您需要并行处理,您仍然可以使用 a Parallel.Foreach,例如,在页面事件PageLoad中利用并行性而不是异步(Parallel.Foreach仅在所有线程完成时返回)。

于 2012-07-06T15:06:15.483 回答