0

正時半にコマンドラインを実行する必要があります。これを行うより良い方法はありますか?毎秒時間をチェックする必要のないものかもしれません。

1 秒間隔のタイマー:

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

        For i As Integer = 0 To 24
            If TimeString = i & ":00:00" & i Then or TimeString = "0" & i & ":00:00 or If TimeString = i & "30:00:" & i Then or TimeString = "0" & i & ":30:00

            End If
        Next
End Sub
4

2 に答える 2

1

ステップ 1 - 現在から次の 1 時間または 30 分までの時間を計算します。

ステップ 2 - タイマーの経過時間をステップ 1 で計算した時間と等しくなるように設定します。

ステップ 3 - タイマーが作動したら、経過時間を 30 分にリセットしてから、必要な作業を行います。

プロセスを正確に 1 時間 / 30 分に実行する必要がある場合は、ステップ 3 で必要な時間を 30 分に設定するのではなく再計算します (これによりドリフトが補正されます)。

ミリ秒から真夜中までを計算するコードを次に示します。あなたはそこから働くことができるはずです

Private Function MillisecondsToMidnight() As Integer

    Dim ReturnValue As Integer
    Dim ts As TimeSpan

    Dim Tomorrow As DateTime = Today.AddDays(1)
    ts = Tomorrow.Subtract(Now)

    ReturnValue = ts.TotalMilliseconds()

    ts = Nothing
    Return ReturnValue

End Function
于 2013-05-14T12:05:55.860 に答える
0

あなたの質問は本当に興味深いです。これで、目的の機能が完全に以下に実装されたと思います。私はそれをテストしましたが、うまくいくと思います。

Button1 を使用してすべての機能をトリガーし、Timer コンポーネントを使用したいとします。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim seconds As New Integer()
    Dim minutes As New Integer()
    seconds = System.DateTime.Now.TimeOfDay.Seconds
    minutes = System.DateTime.Now.TimeOfDay.Minutes
    Dim firstOccurrence As TimeSpan = TimeSpan.Zero
    Do
        If seconds.Equals(60) Then
            Exit Do
        Else
            seconds = seconds + 1
            firstOccurrence = firstOccurrence + TimeSpan.FromSeconds(1)
        End If
    Loop

    Do
        If minutes.Equals(59) Or minutes.Equals(29) Then
            Exit Do
        Else
            minutes = minutes + 1
            firstOccurrence = firstOccurrence + TimeSpan.FromMinutes(1)
        End If
    Loop

    Timer1.Interval = (((firstOccurrence.Minutes) * 60) + ((firstOccurrence.Seconds))) * 1000
    Timer1.Enabled = True


End Sub 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) は Timer1.Tick を処理します

    'execute your code here
    Timer1.Interval = 30 * 60 * 1000

End Sub
于 2013-05-14T20:19:44.413 に答える