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)启动请求是最好的孤独吗?