【问题标题】:Auto refresh form every 30 seconds vb.net每 30 秒自动刷新表单 vb.net
【发布时间】:2019-04-11 01:09:19
【问题描述】:

我想全天打开一个表单,但我想每 30 秒自动刷新一次。 我正在使用此代码:

    Private Sub tempo(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim timer = New Timer
        timer.Interval = 30 * 1000
        AddHandler timer.Tick, AddressOf Form12_Load
        timer.Start()

    End Sub


    Private Sub Form12_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ...
    End sub

但它不起作用。你知道我做错了什么吗? 谢谢。

【问题讨论】:

  • 它是一个网络应用程序吗?如果是,那么您不能使用计时器。刷新需要在客户端完成(javascript,updatepanel,...)
  • @the_lotus 不,它是一个 Windows 应用程序。我在另一个程序中使用了它并且它有效。我找不到问题所在。
  • 它没有做什么?更多细节会很有用。
  • @BrianMStafford 它没有刷新我的表单。
  • @AlexandraMacedoLopes 我将您的代码复制到了一个新项目中,Form12_Load 按您的意愿每 30 秒调用一次。问题必须在您的代码中的其他地方。

标签: vb.net timer refresh


【解决方案1】:

您好,您必须从滴答计时器事件中调用 form_load 事件:

Private Sub Form12_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim timer = New Timer
    timer.Interval = 30 * 1000
    AddHandler timer.Tick, AddressOf timer_Tick
    timer.Start()
End sub
Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs)   
    Form12_Load(me,nothing)
End Sub 

【讨论】:

  • 另外,“现在源代码的含义已经很清楚了。”很明显,该函数是一个计时器处理程序,它 (presently ...) 所做的是加载表单。有一天,不可避免地,你会想在那个计时器滴答声中做点别的事情,现在这也很明显和容易了。 gsimo 的版本是任何程序员期望看到的,这也是一个重要的考虑因素。
  • 这将导致每 30 秒的计时器数量增加一倍,这可能不是 OP 想要的。
  • 同意 Brian,这看起来根本不是正确的解决方案。它将无休止地创建更多的计时器
  • @gsimo83 它只刷新一次表单。
【解决方案2】:

我的0.02,不用多解释:

Private WithEvents clock As New Timers.Timer

Private Sub Form12_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    With clock
        .Interval = 30000
        .AutoReset = True
        .Enabled = True
        .Start()
    End With
End Sub

Private Sub clock_tick() Handles clock.Elapsed
    Me.BeginInvoke(Sub()
                       Me.Refresh()
                   End Sub)
End Sub

【讨论】:

  • elapsed 事件未在 UI 上运行,因此会发生错误。我已经编辑了你的代码。
  • @dbasnett :最好将Timer.SynchronizingObject 设置为当前表单。然后你不必自己调用。 :)
  • @AlessandroMandelli :在特定时间间隔执行与 UI 相关的工作时,最好使用System.Windows.Forms.Timer,因为它已经在 UI 线程上运行,开销很小。 (:
  • @VisualVincent - 对于这个问题,我同意这两点,尤其是当所有 OP 正在刷新表单时,尽管我想知道我们缺少什么需要这样做。是否有一些大循环没有显示?
  • @dbasnett :如果我不得不猜测 OP 正在做一些事情,比如每 30 秒从数据库/Web 服务器获取新数据,但我们之前被愚弄过,事情可能根本不是什么他们最初似乎是。缺乏信息使得很难提出任何更好的方法(如果有的话),所以我们只需要相信 OP 知道她在做什么。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2012-06-13
  • 2013-08-21
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多