我目前正在尝试使用线程和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";
}
}
}
调试时,我可以看到标题的值发生了变化,但我看不到用户界面的变化。
答案 0 :(得分:1)
为此,您必须首先了解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();
}