我正在寻找一种使用带有 c# 的 webforms 在 web 中显示“进度条”的方法。
我做了一个简单的例子,我只想要一个标签显示 1%、2%、3% 等关于将在服务器中运行的后台进程。当它完成更新,比如显示警报之类的东西时,真正的需要比这要复杂一些,但我认为我可以自己做。我在代码中遇到的问题是我总是得到 0.. 在我的“进度条”中它没有得到更新,我遗漏了一些东西,但我不知道它是什么。
编辑
我试图每秒提醒该值以查看该值而不是标签,但它无论如何都不起作用。
我错过了OnClientClick="javascript:GetProgress();"
第一个问题,我更新了它,它仍然无法正常工作
编辑 2
HttpConext.Current 在将其作为线程调用时为空。我应该使用比会话或应用程序更多的东西,也许是单调类?
任何帮助将非常感激。
来自 ASPX 和 JS 的重要信息
<div style="width: 800px" class="css_container">
<cc1:ToolkitScriptManager ID="sm" runat="server" EnableScriptGlobalization="true"
EnableScriptLocalization="true" AsyncPostBackTimeout="60000" EnablePageMethods="true">
</cc1:ToolkitScriptManager>
<asp:UpdatePanel ID="upPanel" runat="server">
<ContentTemplate>
<asp:Button ID="btn" runat="server" Text="Do Something"
CausesValidation="False" OnClick="btn_Click" OnClientClick="javascript:GetProgress();" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
function GetProgress() {
PageMethods.GetProcessed(function(result) {
alert(result);
if (result < 100) {
setTimeout(function(){GetProgress();}, 1000);
}
});
}
代码背后的重要事情
[WebMethod(EnableSession=true), ScriptMethod]
public static string GetProcessed()
{
return HttpContext.Current.Session["processed"].ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["processed"] = 0;
}
}
protected void btn_Click(object sender, EventArgs e)
{
AClass oClass = new AClass();
Thread oThread = new Thread(delegate()
{
oClass.UpdateSession();
});
oThread.Start();
}
来自 Aclass 的重要事项
public class AClass
{
public void UpdateSession()
{
for(int i = 0; i< 100; i++)
{
HttpContext.Current.Session["processed"] = i;
System.Threading.Thread.Sleep(1000);
}
}
}