所以我的.aspx页面上有一个按钮和四个标签。当我单击按钮时,我希望在每次睡眠几秒后为标签分配文本。但是,我希望他们在完成后回复页面。
IE中。标签3需要3秒钟才能完成,标签1需要5秒才能完成,标签2需要7秒才能完成,标签4需要12秒才能完成。
所以在网页上,我们看到标签3出现,然后是标签1等。并非所有三个都同时回来。
的.cs
public string ProvincesAndSatesRetunServiceMethod()
{
int min = 1000;
int max = 10000;
var rand = new Random();
Stopwatch time = new Stopwatch();
time.Start();
System.Threading.Thread.Sleep(rand.Next(min, max));
time.Stop();
return " returned from method in " + time.Elapsed.Seconds + "seconds";
}
protected void PostAll_Click(object sender, EventArgs e)
{
Label1.Text = ProvincesAndSatesRetunServiceMethod();
Label2.Text = ProvincesAndSatesRetunServiceMethod();
Label3.Text = "No Responese Received";
Label4.Text = ProvincesAndSatesRetunServiceMethod();
}
的.aspx
<%--IRE FAKING SERVICE --%>
<asp:UpdatePanel ID="testUpdatePanel" runat="server">
<ContentTemplate>
<asp:Button ID="btnAllPosts" runat="server" Text="Post All" onclick="PostAll_Click" autopostback="false" />
<asp:Button ID="btnReset" runat="server" Text="Reset" onclick="btnReset_Click" /><br />
<asp:Label ID="Label1" runat="server" /><br />
<asp:Label ID="Label2" runat="server" /><br />
<asp:Label ID="Label3" runat="server" /><br />
<asp:Label ID="Label4" runat="server" /><br />
</ContentTemplate>
</asp:UpdatePanel>
现在所有标签在所有方法运行完毕后同时在页面上回传。我在现实生活中需要这个功能,在这种情况下,从几个不同的网络调用服务,每个网络在完成计算后发回信息。重要的是要显示这些内容,因为用户正在等待它们完成,有些可能需要长达五分钟。
此服务不受我控制,无法更改。
提前感谢您的帮助!抱歉新的错误:)
编辑:我现在能够在异步的WCF Web服务中完成这项工作。它工作得很好但是在AsyncCompleted方法中,它会在所有线程并行完成后回发。当线程完成时,我需要它们出现在.aspx页面的更新面板内。关于如何做到这一点的任何想法?提前致谢。
答案 0 :(得分:1)
如果它不是针对精通技术的用户,您可以通过在客户端延迟而不是在服务器端等待(和消耗资源)来完成此任务。您可以使用简单的javascript setTimeout或jQuery延迟函数。看看,它可能会让你的工作变得更容易,如果这是你想要的 - 假的等待。但请注意,谁熟悉计算机/知道编程会注意到你在做什么。
答案 1 :(得分:1)
转到AJAX并允许在客户端而不是服务器端处理返回。只要这是服务器端,您必须等到完成响应流之后才能得到完整的答案。
理论上,您可以刷新部分响应流,但如果#3首先返回,#1和#2仍然等待,那么这是一个非选项。此外,如果您不使用CSS进行格式化,则可能最终必须等待结束表标记等,这将在#2和/或#3之前停止填充#1。
如果转到AJAX,您可以进行单独的呼叫并在返回时进行填充。目前,JQuery是MS推动客户端库的推动。