【问题标题】:How do I make timer wait until done?如何让计时器等到完成?
【发布时间】:2014-03-20 03:51:41
【问题描述】:

我有一个 ASP.NET 网站,我必须在 Gridview 上显示一些数据,我需要尽快显示这些数据,所以我决定在更新面板中创建一个计时器,然后刷新网格一遍又一遍,但是我看到我的计时器没有等到它完成才能再次Tick,它一遍又一遍地执行自己,这给我的数据库带来了性能问题,我怎么能告诉我的计时器“嘿停止,直到这个过程完成,然后继续”。

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" Interval="400" OnTick="Timer1_Tick" EnableViewState="False">
            </asp:Timer>
            <asp:GridView ID="gv_stats" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" ShowHeaderWhenEmpty="True" GridLines="Vertical" Width="562px" OnRowDataBound="gv_stats_RowDataBound" ShowFooter="True" EnableViewState="False" >
                   <AlternatingRowStyle BackColor="#CCCCCC" />
                        <Columns>
                        </Columns>
            </asp:GridView>
     </ContentTemplate>
</asp:UpdatePanel>

我试过这个:

     private bool is_refreshing = false;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
        }
    }

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Timer1.Enabled = false; 
        if(is_refreshing == false)
        BindGrid();
        Timer1.Enabled = true; 



    }

   public void BindGrid()
        {

            is_refreshing = true;
            grd.datasource = con.executedt;
            grd.databind();
            is_refreshing = false;
         }

【问题讨论】:

  • 请将Timer1_Tick 的代码隐藏添加到问题中,并添加您已经尝试过的内容。
  • 好的,Anchit,我添加了。
  • 查看我编辑的答案。

标签: c# asp.net timer updatepanel


【解决方案1】:

当您刷新网格时,您可以设置一个私有布尔变量,指示网格正在刷新,并且在执行刷新网格的代码之前,您可以检查此变量。

编辑 - 尝试使用会话变量而不是私有变量。 查看更新示例。

示例 -

// code change starts
private bool _isGridRefreshing
{
   get
   {
      var flag = HttpContext.Current.Session["IsGridSession"];
      if(flag != null)
      {
         return (bool)flag;
      }

      return false;
   }
   set
   {
      HttpContext.Current.Session["IsGridSession"] = value;
   }
}
// code change ends

protected void Timer1_Tick(object sender, EventArgs e)
{
   if(_isGridRefreshing == false)
   {
       RefreshGrid();
   }
}

private void RefreshGrid()
{
   _isGridRefreshing = true;

   //code to refresh the grid.
}

注意 - 我没有测试过代码,但它应该可以大致了解需要做什么。

【讨论】:

  • 我试过了,但没有用,它还在做。
  • @user3044096,请在问题中添加所有必要的信息,包括您尝试过但没有奏效的所有内容。
  • 谢谢,我最终这样做了,但是我用视图状态来代替,谢谢!(我想我们都忘记了 asp.net 是无状态的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2015-11-16
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多