gpt4 book ai didi

c# - C# 中的 Web 进度条

转载 作者:行者123 更新时间:2023-11-30 22:24:46 24 4
gpt4 key购买 nike

我正在寻找一种使用带有 C# 的 Web 表单在 Web 中显示“进度条”的方法。

我做了一个简单的例子,我只想要一个标签来显示 1%、2%、3% 等关于将在服务器中运行的后台进程。当它完成更新时,比如显示警报之类的东西,真正的需要比这复杂一点,但我认为我可以自己制作它的基础。我在代码中遇到的问题是我总是得到 0.. 在我的“进度条”中它没有得到更新,我遗漏了一些东西但我不知道它是什么。

编辑

我试图每秒提醒值以查看值而不是标签,但无论如何它都不起作用。

我错过了第一个问题中的 OnClientClick="javascript:GetProgress();",我更新了它,它仍然无法正常工作

编辑2

HttpConext.Current 在将其作为线程调用时为空。我是否应该使用 session 或应用程序以外的东西,也许是单例类?

非常感谢任何帮助。


来自 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);
}
}
}

最佳答案

我认为这里可能发生了一些事情:

  1. 您的线程可能会在响应结束时终止。我认为您可以通过更改定义线程的方式来解决此问题:

    Thread oThread = new Thread(new ThreadStart(oClass.UpdateSession));
    oThread.IsBackground = true; // Set this
    oThread.Start();
  2. 您将一个字符串百分比返回给您的回调函数,然后将它与一个数字进行比较。这不是真正的问题,但为了良好的编程,您应该更改服务器端 GetProcessed() 以返回一个实际的整数:

    public static int GetProcessed()
    {
    int result = 0;
    int.TryParse(HttpContext.Current.Session["processed"].ToString()), out result);
    return result;
    }
  3. UpdatePanel 请求在幕后启动完整的页面生命周期。您能否验证此代码不会在您的 GetProcessed() 网络方法的每个滴答声中重置您的进度?

    if (!IsPostBack)
    {
    Session["processed"] = 0;
    }

关于c# - C# 中的 Web 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com