从线程更改 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 上看不到变化。

从线程更改 aspx 上的值

为此,您必须首先了解页面生命周期 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();
    }