Timer.Change メソッド (Int32, Int32)

時間間隔を計るために 32 ビット符号付き整数を使用して、タイマの開始時刻とメソッドの呼び出しの間隔を変更します。

Overloads Public Function Change( _
   ByVal dueTime As Integer, _   ByVal period As Integer _) As Boolean
[C#]
public bool Change(intdueTime,intperiod);
[C++]
public: bool Change(intdueTime,intperiod);
[JScript]
public function Change(
   dueTime : int,period : int) : Boolean;

パラメータ

  • dueTime
    Timer 構築時に指定されたコールバック メソッドを呼び出す前に遅延する時間 (ミリ秒単位)。タイマが再開されないようにする Timeout.Infinite を指定します。0 を指定して、タイマをすぐに再開します。
  • period
    Timer の構築時に指定されたコールバック メソッドを呼び出す間隔の時間 (ミリ秒単位)。周期的なシグナル通知を無効にする Timeout.Infinite を指定します。

戻り値

現在のインスタンスが破棄されている場合は true 。それ以外の場合は false

例外

例外の種類 条件
ObjectDisposedException Timer が既に破棄されています。
ArgumentOutOfRangeException dueTime パラメータまたは period パラメータが負の値であり、 Infinite と等しくありません。

解説

コールバック メソッドは dueTime が経過した後一度呼び出されます。その後は period で指定した時間間隔が経過するごとに呼び出されます。

dueTime が 0 の場合、コールバック メソッドはすぐに呼び出されます。 dueTimeInfinite の場合、コールバック メソッドは呼び出されません。タイマは無効になっていますが、 Change メソッドを呼び出し、 dueTime に正の値を指定することによって再有効化できます。

period が 0 または Infinite で、 dueTimeInfinite でない場合、コールバック メソッドは一度呼び出されます。タイマの定期的な動作は無効になっていますが、 Change メソッドを呼び出し、 period に正の値を指定することによって再有効化できます。

使用例

[Visual Basic, C#, C++] Timer を起動し、一定の起動回数の後、その時間設定を変更する例を次に示します。

 
Imports Microsoft.VisualBasic
Imports System
Imports System.Threading

Public Class TimerExample

    Shared Sub Main()
    
        Dim autoEvent As New AutoResetEvent(False)
        Dim statusChecker As New StatusChecker(10)

        ' Create the delegate that invokes methods for the timer.
        Dim timerDelegate As TimerCallback = _
            AddressOf statusChecker.CheckStatus

        ' Create a timer that signals the delegate to invoke 
        ' CheckStatus after one second, and every 1/4 second 
        ' thereafter.
        Console.WriteLine("{0} Creating timer." & vbCrLf, _
            DateTime.Now.ToString("h:mm:ss.fff"))
        Dim stateTimer As Timer = _
                New Timer(timerDelegate, autoEvent, 1000, 250)

        ' When autoEvent signals, change the period to every 
        ' 1/2 second.
        autoEvent.WaitOne(5000, False)
        stateTimer.Change(0, 500)
        Console.WriteLine(vbCrLf & "Changing period." & vbCrLf)

        ' When autoEvent signals the second time, dispose of 
        ' the timer.
        autoEvent.WaitOne(5000, False)
        stateTimer.Dispose()
        Console.WriteLine(vbCrLf & "Destroying timer.")
    
    End Sub
End Class

Public Class StatusChecker

    Dim invokeCount, maxCount As Integer 

    Sub New(count As Integer)
        invokeCount  = 0
        maxCount = count
    End Sub

    ' This method is called by the timer delegate.
    Sub CheckStatus(stateInfo As Object)
        Dim autoEvent As AutoResetEvent = _
            DirectCast(stateInfo, AutoResetEvent)
        invokeCount += 1
        Console.WriteLine("{0} Checking status {1,2}.", _
            DateTime.Now.ToString("h:mm:ss.fff"), _
            invokeCount.ToString())

        If invokeCount = maxCount Then
        
            ' Reset the counter and signal to stop the timer.
            invokeCount  = 0
            autoEvent.Set()
        End If
    End Sub

End Class

[C#] 
using System;
using System.Threading;

class TimerExample
{
    static void Main()
    {
        AutoResetEvent autoEvent     = new AutoResetEvent(false);
        StatusChecker  statusChecker = new StatusChecker(10);

        // Create the delegate that invokes methods for the timer.
        TimerCallback timerDelegate = 
            new TimerCallback(statusChecker.CheckStatus);

        // Create a timer that signals the delegate to invoke 
        // CheckStatus after one second, and every 1/4 second 
        // thereafter.
        Console.WriteLine("{0} Creating timer.\n", 
            DateTime.Now.ToString("h:mm:ss.fff"));
        Timer stateTimer = 
                new Timer(timerDelegate, autoEvent, 1000, 250);

        // When autoEvent signals, change the period to every 
        // 1/2 second.
        autoEvent.WaitOne(5000, false);
        stateTimer.Change(0, 500);
        Console.WriteLine("\nChanging period.\n");

        // When autoEvent signals the second time, dispose of 
        // the timer.
        autoEvent.WaitOne(5000, false);
        stateTimer.Dispose();
        Console.WriteLine("\nDestroying timer.");
    }
}

class StatusChecker
{
    int invokeCount, maxCount;

    public StatusChecker(int count)
    {
        invokeCount  = 0;
        maxCount = count;
    }

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("{0} Checking status {1,2}.", 
            DateTime.Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal Main.
            invokeCount  = 0;
            autoEvent.Set();
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

__gc class StatusChecker
{
    int invokeCount, maxCount;
public:
    StatusChecker(int count) : invokeCount(0), maxCount(count) {}

    // This method is called by the timer delegate.
    void CheckStatus(Object* stateInfo)
    {
        AutoResetEvent* autoEvent = 
            dynamic_cast<AutoResetEvent*>(stateInfo);
        Console::WriteLine(S"{0} Checking status {1,2}.", 
            DateTime::Now.ToString("h:mm:ss.fff"), 
            (++invokeCount).ToString());

        if(invokeCount == maxCount)
        {
            // Reset the counter and signal main.
            invokeCount  = 0;
            autoEvent->Set();
        }
    }
};

void main()
{
    AutoResetEvent* autoEvent     = new AutoResetEvent(false);
    StatusChecker*  statusChecker = new StatusChecker(10);

    // Create the delegate that invokes methods for the timer.
    TimerCallback* timerDelegate = 
        new TimerCallback(statusChecker, &StatusChecker::CheckStatus);

    // Create a timer that signals the delegate to invoke CheckStatus 
    // after one second, and every 1/4 second thereafter.
    Console::WriteLine(S"{0} Creating timer.\n", 
        DateTime::Now.ToString("h:mm:ss.fff"));
    Timer* stateTimer = 
        new Timer(timerDelegate, autoEvent, 1000, 250);

    // When autoEvent signals, change the period to every 1/2 second.
    autoEvent->WaitOne(5000, false);
    stateTimer->Change(0, 500);
    Console::WriteLine(S"\nChanging period.\n");

    // When autoEvent signals the second time, dispose of the timer.
    autoEvent->WaitOne(5000, false);
    stateTimer->Dispose();
    Console::WriteLine(S"\nDestroying timer.");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Timer クラス | Timer メンバ | System.Threading 名前空間 | Timer.Change オーバーロードの一覧 | タイマ