如何在asp.net中管理多线程来填充标签?

时间:2012-06-04 07:11:00

标签: c# asp.net multithreading c#-4.0 asynchronous

我的aspx页面中有一个按钮和两个标签,我想在标签中显示文字,几秒钟后我想在按钮点击时用不同的文字填充第二个标签 我的代码是 源文件

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
<asp:Label ID="lblFirst" runat="server" Text=""></asp:Label> 
 <asp:Label ID="lblSecond" runat="server" Text=""></asp:Label>
<asp:Button ID="btnFirst" runat="server" Text="First" 
            onclick="btnFirst_Click" />
 </ContentTemplate>
        </asp:UpdatePanel>

代码文件

    protected void btnFirst_Click(object sender, EventArgs e)
            {
                first();
                second();
            }
            private void first()
            {
                I am Calling a method form my class file which returns a string , and assigning to label first
//class1 obj=new class1();
//string result=obj.first()
           // lblFirst.Text =result;
            }
            private void second()
            {
                   I am Calling a method form my class file which returns a string , and assigning to label Second
//class2 obj=new class2();
//string result1=obj.Second()             
                lblSecond.Text = result1;
            }

我得到两个回复,我想显示我第一次没有等待第二次回复,第二次回复后应立即显示而不会失去第一反应,请给我任何紧急建议,   是否有其他程序可以获得此类输出

由于 hemanth

1 个答案:

答案 0 :(得分:3)

你不能在服务器代码中做出类似的延迟。在服务器代码呈现之前,页面不会发送到浏览器,而是在控制事件之后发生。代码将等待七秒钟,然后呈现页面并将其发送到浏览器。

您必须使用客户端代码来获得您所拥有的体验。服务器发送到浏览器后,无法将更改推送到网页。

protected void btnFirst_Click(object sender, EventArgs e) {
  string code =
    "window.setTimeout(function(){document.getElementById('" + lblFirst.ClientID + "').innerHTML='first filled'},1000);"+
    "window.setTimeout(function(){document.getElementById('" + lblSecond.ClientId + "').innerHTML='Second filled'},7000);";
  Page.ClientScript.RegisterStartupScript(this.GetType(), "messages", code, true);
}