线程完成后更改页面控件值?

时间:2012-07-06 14:56:46

标签: c# asp.net multithreading

  

可能重复:
  asp.net update UI using multi-thread

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

但我的价值不会改变。

我的样本:

    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;
    }

1 个答案:

答案 0 :(得分:1)

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

但是,如果您需要并行处理,您仍然可以在Parallel.Foreach之类的页面事件中使用PageLoad来利用并行性而不是异步({{1只有当所有线程都完成时才会返回。)