我如何使计时器等待,直到完成

本文关键字:等待 何使 计时器 | 更新日期: 2023-09-27 17:51:10

我有一个ASP。网网站,我要展示一些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;
         }

我如何使计时器等待,直到完成

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

EDIT -尝试使用会话变量而不是私有变量。

示例-

// 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.
}

注意-我还没有测试代码,但它应该给出一个公平的想法,需要做什么