从线程更改 aspx 上的值
本文关键字:aspx 线程 | 更新日期: 2023-09-27 18:34:50
我目前正在尝试用线程和asp做一些事情,这让我很头疼。
问题是我有一个aspx,并通过在线程上调用的委托,我想更改页面标题和一些控件值。这是代码。
namespace back
{
public partial class Site1 : System.Web.UI.MasterPage
{
public delegate void ElDelegado();
public ElDelegado d;
protected void Page_Load(object sender, EventArgs e)
{
if(Session.Contents.Count == 0)
Response.Redirect("Default.aspx");
d = new ElDelegado(ChangeText);
Thread t = new Thread(new ThreadStart(ElThread));
t.IsBackground = true;
t.Start();
}
public void Salir_Click(object sender, EventArgs e)
{
Session.RemoveAll();
Response.Redirect("Default.aspx");
}
public void ElThread()
{
d();
}
public void ChangeText()
{
this.Page.Title = "El título";
lbl.Text = "El texto";
}
}
}
调试时,我可以看到 Title 的值发生了变化,但在 UI 上看不到变化。
为此,您必须首先了解页面生命周期 ASP.net。
以下是问题区域。
-
在更改标题之前,page_load事件完成并且响应已发送到客户端。一旦响应发送到客户端,您将无法执行任何操作。
-
如果要根据某些计算更新页面标题,最好在AJAX调用中查找选项。
-
在您的代码中,如果您希望线程更改标题并显示在浏览器的页面标题中,则必须等待线程完成其工作。
protected void Page_Load(object sender, EventArgs e) { if(Session.Contents.Count == 0) Response.Redirect("Default.aspx"); d = new ElDelegado(ChangeText); Thread t = new Thread(new ThreadStart(ElThread)); t.IsBackground = true; t.Start(); t.Join(); }