Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程完成后更改页面控件值?_C#_Asp.net_Multithreading - Fatal编程技术网

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

C# 线程完成后更改页面控件值?,c#,asp.net,multithreading,C#,Asp.net,Multithreading,可能重复: 我启动了一个线程在后台处理。我想在处理完成后更改页面上的标签 但我的价值观没有改变 我的样本: protected void Page_Load(object sender, EventArgs e) { new Thread(() => ActionStart()) { IsBackground = true }.Start(); } bool _shouldStop = false; public void Ac

可能重复:

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

但我的价值观没有改变

我的样本:

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

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


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

@Tudor是正确的;当线程完成时,请求已经返回到客户端;服务器无法与客户机通信-客户机已收到其消息,可能永远不会回拨。相反,客户机必须使用计时器通过AJAX或其他方法(例如ClientCallbacks)启动请求是最好的孤独吗?