none
实时计数功能 RRS feed

  • 问题

  • <asp:Panel ID="CountWindow" runat="server" CssClass="SelectWindow" Visible=false>
    正在生成静态文件(<asp:Label ID="NowNum" runat="server" Text="0"></asp:Label>/<asp:Label ID="TotalCount"
    runat="server" Text=""></asp:Label>)
    </asp:Panel>

    protected void Button5_Click(object sender, EventArgs e)
    {
    CountWindow.Visible = true;
    CreateHtmlForProducts HtmlCreater = new CreateHtmlForProducts();
    int Total = 0;
    int i = 0;
    foreach (GridViewRow row in GridView1.Rows)
    {
    makeGuid = (GridView1.Rows[row.RowIndex].Cells[9].Text).ToString();
    i = i + 1;
    string Rtn = HtmlCreater.CreateHtml(makeGuid);
    NowNum.Text = i.ToString();
    }
    TotalCount.Text = i.ToString();
    }

    我想用一个panel控件实现生成静态页时实时显示当前生成到哪个进度的功能
    但是这样写代码的话只有等到页面全部生成完了才显示,然后中间就一直停着不动,显得很不友好,如果想要每生成一个就显示当前生成到第几页要怎么做,如果用timer控件的话,应该是怎么样一个过程,谢谢啊
    2010年3月22日 1:44

答案

  • 你好,

    如上面几位版主所言,我觉得用ajax+Timer比较合适。

    定义一个全局的变量,每次处理完一个页面加一。在后台定义一个用webmethod属性修饰的方法返回这个变量。

    在ScriptManager中启用pagemethod。每隔一段时间用ajax调用刚才定义的page method,在前端根据返回的值进行设置。


    Microsoft Online Community Support
    • 已建议为答案 mazhou 2010年3月23日 9:24
    • 已标记为答案 KeFang Chen 2010年3月26日 5:57
    2010年3月23日 4:09

全部回复

  • 你好!

    考虑将生成的工作交给一个队列或线程来做。线程中每生成一个页面往一个数量表或变量中写入当前生成的信息。客户端使用一个 ajax timer 定时去获取显示这个信息。另外如果生成的工作占用时候比较长可以考虑使用 Windows 服务与消息队列来做。


    知识改变命运,奋斗成就人生!
    2010年3月22日 2:14
    版主
  • 你好!

    考虑将生成的工作交给一个队列或线程来做。线程中每生成一个页面往一个数量表或变量中写入当前生成的信息。客户端使用一个 ajax timer 定时去获取显示这个信息,这样的好处用户不必等到你生成完成后才能到其它页面进行操作。 另外如果生成的工作占用时候比较长可以考虑使用 Windows 服务与消息队列来做。

    知识改变命运,奋斗成就人生!

    谢谢,但是这些我都没用过啊,我只是想用最简单的方法实现这个效果就可以了
    2010年3月22日 2:41
  • 更新progress之后要用Application类的好象是DoEvents还是什么方法,先让后面的消息先执行,才能让更新生效。
    2010年3月22日 4:47
  • 更新progress之后要用Application类的好象是DoEvents还是什么方法,先让后面的消息先执行,才能让更新生效。

    谢谢,不是很明白
    2010年3月22日 5:30
  • Application.DoEvents();

    作用:暂停当前函数的执行,处理一下消息列表里面的消息(譬如说更新界面)

    2010年3月22日 5:32
  • Application.DoEvents();

    作用:暂停当前函数的执行,处理一下消息列表里面的消息(譬如说更新界面)

    哦,那这样会不会把生成页面的时间拖得更长,因为在这过程中还要中断一下处理显示
    2010年3月22日 6:00
  • Application.DoEvents(); 是 Winform 应用程序中的方法。在 WebForm 中是不能使用的,建议你还是使用 Ajax Timer 实现。
    知识改变命运,奋斗成就人生!
    2010年3月22日 12:14
    版主
  • 你好,

    如上面几位版主所言,我觉得用ajax+Timer比较合适。

    定义一个全局的变量,每次处理完一个页面加一。在后台定义一个用webmethod属性修饰的方法返回这个变量。

    在ScriptManager中启用pagemethod。每隔一段时间用ajax调用刚才定义的page method,在前端根据返回的值进行设置。


    Microsoft Online Community Support
    • 已建议为答案 mazhou 2010年3月23日 9:24
    • 已标记为答案 KeFang Chen 2010年3月26日 5:57
    2010年3月23日 4:09
  • 你好,

    如上面几位版主所言,我觉得用ajax+Timer比较合适。

    定义一个全局的变量,每次处理完一个页面加一。在后台定义一个用webmethod属性修饰的方法返回这个变量。

    在ScriptManager中启用pagemethod。每隔一段时间用ajax调用刚才定义的page method,在前端根据返回的值进行设置。


    Microsoft Online Community Support

    谢谢,问题是我ajax还不会用啊,我先看看ajax的用法再说
    2010年3月23日 6:23
  • 你好,

    关于这个ajax的例子你可以参考下面的帖子中的代码。

    http://social.microsoft.com/Forums/en-US/295/thread/411abeef-a256-4680-a5ee-0ce9de5dc279


    Microsoft Online Community Support
    2010年3月23日 6:51
  • 你好,

    关于这个ajax的例子你可以参考下面的帖子中的代码。

    http://social.microsoft.com/Forums/en-US/295/thread/411abeef-a256-4680-a5ee-0ce9de5dc279


    Microsoft Online Community Support

    非常感谢
    2010年3月23日 8:49