【问题标题】:How can I get a program to run automatically at specific times a day (VB.NET)如何让程序在一天的特定时间自动运行(VB.NET)
【发布时间】:2013-12-27 16:44:14
【问题描述】:

我现在正在开发的应用程序允许用户每天两次更新 Excel 工作表或 Sql 数据库以设置指标。该程序通过在特定时间弹出来做到这一点(例如,上午 6:00、下午 5:00、下午 3:42,无论用户设置什么)。通过让程序在特定时间弹出,程序(“Auto Excel It!!!”)允许您作为用户跟踪设置数据(例如,销售电话、销售演示、会议、编码小时数、jalepeño 数量吃的墨西哥卷饼等)。

开发人员如何通过 Windows Scheduler API(或其他更好的方法)让该程序在特定时间自动“弹出”/启动/运行?

这是我最近的理解的演变:

什么都没有 --> 程序在后台运行时使用计时器 --> 使用 Windows 调度程序的 API 自动运行(当前) --> 您的答案可能有新的理解

例如,我知道:DispatcherTimers、Timers、另一个我不知道的计时器、Sleep()、Windows Scheduler。但是考虑到这些,我不知道该怎么做:通过 Windows 调度程序自动启动程序;如果使用计时器,则保留计算机资源;甚至如何让这个顶部自动弹出。

更新 1:

@nfell2009:你的逻辑帮了我很大的忙。起初,我不得不将您的 Timer 转换为 DispatcherTimer(似乎是 WPF 表单标准)。然后,我将 Sub tCheckTime 的“句柄”切换为“AddHandler tCheckTime.Tick, AddressOf tCheckTime_Tick”——为什么我必须这样做是个好问题。

然后,一旦我设置了基本的 EventHandlers,你将用户的文本(​​作为日期)与 System.Date 进行比较的想法是好的——当我搞砸了一些事情并且无法让代码工作时,我将其切换并将 System.Date 转换为字符串-即我从 String->DateDate->String...那时我让 Timer 开始工作。当我的 System.Time 计时到下午 3:12 时,MsgBox 弹出“您的消息”。

(快速(邪恶)谢谢!我花了四个多小时才让它工作)

代码:

从在 tCheckTime_Tick 使用“句柄”(这似乎“应该”工作)

Private Sub tCheckTime_Tick(sender As Object, e As EventArgs) Handles tCheckTime.Tick
...
End Sub

到 AddHandler 等等,AddressOf tCheckTime_Tick(有效)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Loaded
        'MsgBox(Now().ToString("hh:mm"))        'String.Format("{hh:mm}", Now()))
        AddHandler tCheckTime.Tick, AddressOf tCheckTime_Tick 'Why is this necessary? 
        tCheckTime.Interval = New TimeSpan(0, 1, 0)
End Sub

【问题讨论】:

  • 对于这样一个简单的问题,这是非常罗嗦的。你的目标应该是简明扼要。无需为我们加油或提供背景故事。
  • 我有办法,让我测试一下代码,我会回答的

标签: vb.net excel


【解决方案1】:
Public Class Form1
Dim iSetTime As Date
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub btnSetTime_Click(sender As Object, e As EventArgs) Handles btnSetTime.Click
    If (tCheckTime.Enabled = True) Then
        tCheckTime.Enabled = False
    End If

    iSetTime = txtTHour.Text + ":" + txtTMinute.Text + ":" + txtTSecond.Text

    tCheckTime.Enabled = True
End Sub

Private Sub tCheckTime_Tick(sender As Object, e As EventArgs) Handles tCheckTime.Tick
    If (TimeOfDay = iSetTime) Then
        MsgBox("Your Message")
    End If
End Sub
End Class

您需要对文本框进行错误检查,但这很简单: 3 个文本框,指示哪个是哪个,所以每个标签都可能带有 H、M、S 或其他东西。

设置时间和计时器的按钮。命名: 文本框 小时 = txtTHour

分钟 = txtTMinute

秒 = txtTSecond

按钮 开始按钮 = btnSetTime

计时器 计时器 = tCheckTime

【讨论】:

  • 你的逻辑帮了我很大的忙。起初,我不得不将您的 Timer 转换为 DispatcherTimer。然后,我将 Sub tCheckTime 的“句柄”切换为“AddHandler tCheckTime.Tick,AddressOf tCheckTime_Tick”(为什么我必须这样做......嗯,好问题)。一旦我设置了基本的 EventHandlers,您将用户的文本(​​作为日期)与 System.Date 进行比较的想法是好的——当我搞砸了一些事情并且无法让代码工作时,我将其切换并转换System.Date 到一个字符串——将它与代码进行比较......那是我让 Timer 工作的时候。
  • (添加到更新的评论上方)
  • @crowbarProgramming 如果其中一个答案回答了您的问题,您应该通过单击答案旁边的复选标记将其标记为答案,这样他们将获得代表,您也将获得代表。它还会将问题标记为已回答。
  • 很高兴我能帮上忙,就像@MarkHall 所说的那样——加上将其标记为答案:)。希望现在一切都得到整理! :D
【解决方案2】:

我能想到两种简单的方法:

  1. 让您的程序计算下一次出现的时间(以秒为单位),然后设置一个带有经过时间的计时器,以便在引发滴答事件时您可以做任何您需要做的事情。

  2. 在需要时使用 MS 任务管理器启动您的程序。

【讨论】:

  • 我会推荐选项 2(正如 Rob 所建议的那样)。
  • 关于这一点,我对如何操作/访问/使用 MS 任务管理器的了解有些有限——您有任何通过 VB 使用它的建议或资源吗?在此期间,我会用谷歌搜索我能找到的东西。附: ...谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-04-05
  • 2017-09-25
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多