从循环中更新UI线程:ASP.NET Webforms

本文关键字:ASP NET Webforms 线程 UI 循环 更新 | 更新日期: 2023-09-27 18:29:57

全部,

我有一个包含标签控件的"更新面板"控件。我还有一个Timer控件,它的间隔设置为1秒。该定时器控件假设每秒用一个公共属性的值设置标签控件的文本,该属性在循环的每次迭代后都会更改。

然而,最终的功能是,在整个循环完成后,UI将被更新。我想知道需要做什么/编码什么,以确保在每次循环迭代后,标签控件都用_servername属性的值更新?

这是我的代码:

   <form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Timer ID="tmr" runat="server" Interval="1000" ontick="tmr_Tick">
</asp:Timer>
<div>
    <asp:UpdatePanel ID="udp1" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="tmr" EventName="Tick" />
        </Triggers>
        <ContentTemplate>
            <asp:Label ID="lblInserts" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdateProgress runat="server" ID="udprg1" AssociatedUpdatePanelID="udp1"
        DisplayAfter="10">
        <ProgressTemplate>
            <img src="media/ajaxloaderBlueLoading.gif" alt="ProgressImage" />
        </ProgressTemplate>
    </asp:UpdateProgress>
    <div id="_asyncCallsMadeDiv"></div>
</div>
</form>

//背后的代码

   public string ServerName 
    {
        get { return _serverName; } 
        set { _serverName = value;} 
    }

   protected void tmr_Tick(object sender, EventArgs e)
    {
            lblInserts.Text = ServerName;
    }
   protected void btnUpload_Click(object sender, EventArgs e)
    {
        //Loop through data
        while((line = rdr.ReadLine()) != null)
        {
            string [] arrayline = line.Split(','); 
            ServerStatus s = new ServerStatus
            {
                ServerName = arrayline[0],
                Purpose = arrayline[1],
                Primary = arrayline[2],
                Secondary = arrayline[3],
                OS = arrayline[4],
                MachineType = arrayline[5],
                Comments = arrayline[6],
                VMTools = arrayline[7],
                TimeSettings = arrayline[8],
                LastPatchDate = arrayline[9],
                CARemoval = arrayline[10],
                PLUpdate = arrayline[11],
                DefaultGatewayChange = arrayline[12]
            };
            _serverName = arrayline[0];
    }

从循环中更新UI线程:ASP.NET Webforms

计时器控件的onTick属性设置为一个不存在的方法。您可以将代码隐藏中的tmr_Tick方法重命名为tmrUdp1_Tick,或将onTick属性设置为tmr_Tick-