【问题标题】:Why won't my index variable increment when ASP.NET Timer Tick event is handled?为什么在处理 ASP.NET Timer Tick 事件时我的索引变量不会增加?
【发布时间】:2015-12-23 03:30:13
【问题描述】:

这是一个有趣的问题。我有一个 ASP.NET 计时器 (Timer1),它应该增加一个整数变量,我用它来跟踪菜单中的哪个项目被选中。查看 Tick 事件处理程序。

'Menu_RightSide.Items(TimerMenuInde​​x).Selected = True`

Protected Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick

    Select Case TimerMenuIndex
            Case 0
                bindDataToChart_locationChrono() 
                TimerMenuIndex += 1
            Case 1
                BindCurrentProgressDataToChart() 
                TimerMenuIndex += 1
            Case 2
                bindDBDataToChart()                   
                TimerMenuIndex += 1
            Case Else
                'Do Something else         
    End Select
End Sub

这看起来应该是比较简单的逻辑。我想要的只是当调用 Tick 事件处理函数时,TimerMenuIndex 变量增加一。但是,由于某种原因,它不会增加。我应该提到TimerMenuIndex 是一个全局变量。我知道 Timer 控件是基于 AJAX 的,所以它不应该在 Timer 刷新页面时调用Page_Load 函数。我想不出任何为什么这不起作用的原因。我可能会遗漏一些非常明显的东西。有什么想法吗?

更新:这是与此功能相关的Page_Load 代码:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
     Menu_RightSide.Items(TimerMenuIndex).Selected = True
End Sub

【问题讨论】:

  • 我想你可能会发现它确实会触发 page_load,因为它是部分回发。同时显示页面加载代码
  • 我已经用请求的信息更新了问题。
  • @ic3man7019 你有脚本管理器吗?
  • @meda 是的,有一个 ScriptManager 存在。
  • 请仔细阅读本指南,看看您是否遗漏了什么msdn.microsoft.com/en-us/library/…

标签: asp.net vb.net timer


【解决方案1】:

发生的事情是变量在滴答事件后重置为0

你需要声明Shared,这将使变量保持它的值,并且

Shared TimerMenuIndex As Integer = 0

I created a sample application for you to try

【讨论】:

  • 这是正确的。我不敢相信事情就这么简单。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
相关资源
最近更新 更多