以下はコンソールプログラムです。それは多くの可能性の一つを示しています。これがあなたの要件を満たしていない場合は、おそらく要件が明確になる必要があります。これはコンソールプログラムなので、私はAutoResetEventを使用してWorkDoneの値が3になるまでプログラムを待機させています。あなたのTimerCallbackは何かをやりなおすことができ、3秒ごとに実行します。
using System;
using System.Threading;
namespace SO42323314
{
class Program
{
static void Main(string[] args)
{
WorkToDo ToDo = new WorkToDo();
Timer ticker = new Timer(TimerCallback, ToDo, 0, 3000);
ToDo.are.WaitOne();
}
/// <summary>
/// This will be called every time the interval occurs
/// </summary>
/// <param name="ToDoObject"></param>
static void TimerCallback(object ToDoObject)
{
WorkToDo ToDo = ToDoObject as WorkToDo;
Console.WriteLine(ToDo.WorkDone);
++ToDo.WorkDone;
if (ToDo.WorkDone > 3)
ToDo.are.Set(); // signal the AutoResetEvent
}
}
class WorkToDo
{
public int WorkDone = 0;
// initialize the AutoResetEvent to not signaled
public AutoResetEvent are = new AutoResetEvent(false);
}
}
Visual StudioはIDEであり、プログラミング言語ではありません。 – tkausl
Uiスレッドではない場合Thread.Sleep(3000); ... C#を仮定すると – Axis
ループの代わりにタイマーを使用します。 –