C# 被回帖卡住了
我创建了一个运行大量检查的站点。这些检查是通过一个按钮开始的,需要几分钟才能完成(基本上是执行一些数据检查,写入mysql数据库)。然后,我将gridview控件绑定到mysql数据库,检查完成后,页面刷新,gridview更新。。太好了 这一切都很好,除了我不能告诉用户发生了什么 一旦选中该按钮,站点将进入长时间刷新状态。我不能更新页面上的任何标签来表示它正在运行,等等。所有标签都会在c代码完成后更新 我在服务器上尝试了一个c#后台工作者来处理长时间运行的任务,希望页面会返回,标签会更新(然后在后台工作者完成事件中绑定数据网格),但没有乐趣。。页面只等待后台工作程序完成 我也尝试过添加一个更新面板,在面板内添加一个标签,然后调用panel.update(),但同样,在所有代码退出之前,实际上不会更新C# 被回帖卡住了,c#,asp.net,ajax,C#,Asp.net,Ajax,我创建了一个运行大量检查的站点。这些检查是通过一个按钮开始的,需要几分钟才能完成(基本上是执行一些数据检查,写入mysql数据库)。然后,我将gridview控件绑定到mysql数据库,检查完成后,页面刷新,gridview更新。。太好了 这一切都很好,除了我不能告诉用户发生了什么 一旦选中该按钮,站点将进入长时间刷新状态。我不能更新页面上的任何标签来表示它正在运行,等等。所有标签都会在c代码完成后更新 我在服务器上尝试了一个c#后台工作者来处理长时间运行的任务,希望页面会返回,标签会更新(然后
有什么非技术性的想法吗?所有代码都添加了,非常感谢。我认为最简单的方法是使用预先制作的“UpdateProgress”控件 制作一个新的页面,并启动我刚刚制作的示例来演示这个想法。单击按钮时,页面具有加载文本,五秒钟后页面内容更改,加载消息消失: ASP内容:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" runat="server">
<ProgressTemplate>
<p>text that indicates stuff is happening in the background (example: loading please wait)</p>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Click me!"
onclick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
如果您有任何问题,请让我知道,但这应该是相当不言自明的,可以在您刚刚添加的任何代码中实现ScriptManager、UpdateProgress控件和您自己的加载文本,并将您的代码放在按钮中,然后单击“代码隐藏”。是,我添加了一个scriptmanager,但它似乎不起作用。所以你是说我需要从ajax控件而不仅仅是按钮启动我的c#代码?使用scriptmanager对asp.net中的UpdatePanel进行一些初步阅读。只需使用google ASP.net updatepanel,您就需要在updatepanel中抛出某种gridview控件。在updatepanel中,您可以有一个进度条或标签,在数据更新时进行更新。好的,我明白了。我添加了一个带有标签的updatepanel,当我按下更新面板中的按钮时,该标签会更新,但直到任务完成后才会更新。在按钮中单击“我已更新标签”,然后通过睡眠复制任务。直到任务完成,页面才会更新。所以,如果我从更新面板中调用另一个过程,在任务完成之前,它仍然不会更新?我想单击按钮,更新页面,说明作业正在运行,然后运行作业。
protected void Button1_Click(object sender, EventArgs e)
{
//wait five seconds to demonstrate the idea
System.Threading.Thread.Sleep(5000);
//update page content
Label1.Text = "Stuff in the background has finished executing and the page has been loaded with the new content.";
}