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 の場合、コールバック メソッドはすぐに呼び出されます。 dueTime が Infinite の場合、コールバック メソッドは呼び出されません。タイマは無効になっていますが、 Change メソッドを呼び出し、 dueTime に正の値を指定することによって再有効化できます。
period が 0 または Infinite で、 dueTime が Infinite でない場合、コールバック メソッドは一度呼び出されます。タイマの定期的な動作は無効になっていますが、 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 オーバーロードの一覧 | タイマ