从线程更改aspx上的值

时间:2014-12-20 04:18:56

标签: c# asp.net

我目前正在尝试使用线程和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";
        }
    }
}

调试时,我可以看到标题的值发生了变化,但我看不到用户界面的变化。

1 个答案:

答案 0 :(得分:1)

为此,您必须首先了解ASP.net页面生命周期。

以下是问题区域。

  1. 在更改标题之前,您已完成page_load事件并已将响应发送给客户端。一旦发送给客户的回复,您就无法做任何事情。

  2. 如果您想根据某些计算更新页面标题,请在AJAX调用中查找选项。

  3. 在您的代码中,如果您希望线程更改标题并在浏览器的页面标题中显示,则必须等待线程完成其工作。

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