0

異なるタイミングで異なるスレッドごとにタイマーを設定しようとしています。私が知る限り、メインメソッドでタイマーを設定すると、すべてのスレッドで同じことが機能するため、強制終了せずに異なるスレッドごとにタイマーを設定する方法を知りたいですスレッド、これに関する親切なアドバイスをお願いします

static Timer _timer;

static void Main(string[] args)
{
   _timer = new Timer(10000);
   _timer.Enabled = true;
   _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
 }

上記の貼り付けられたコードは、すべてのスレッドが 10 秒ごとに実行されるように機能します。メイン メソッドのタイマーによってすべてのスレッドが 10 秒ごとに実行される方法は、スレッドごとに異なるタイミングでタイマーを設定する必要があることです。

概要:

なぜ私はこの質問をしたのか、ここではウィンドウ サービスの要件があります。何をすべきか、たとえば、3 つの異なるスレッド (XYZ、ABC、PQR) を持つウィンドウ サービスで、サービスを開始すると、3 つのスレッドすべてが初期化され、これらのスレッドは次のように機能する必要があります。アプリ構成から渡されるタイマー設定に基づいて、これらのスレッドは設定されたタイミングに基づいて起動する必要があります。親切なアドバイス

4

2 に答える 2

0

一定時間後にいくつかのスレッドを開始したい場合は、System.Threading.Timer を使用できます。

int[] times = new int[] { 10000, 14000, 17000 };
foreach (int time in times)
{
System.Threading.Timer t = new System.Threading.Timer(MyTimerCallback, null, time, 0);
...
}

private void MyTimerCallback(object state)
{
  //Do some awesome stuff
}
于 2012-06-14T06:16:09.213 に答える
0

[ThreadStatic]属性を使用しようとしましたか? この属性は、結合された verable がスレッド間で共有されず、そのコピーがスレッドごとに作成されることを定義します。

[ThreadStatic]
static Timer _timer;

void MyThreadStartMethod()
{
    _timer=new Timer(value);
    ...
}

また、コードにスレッドが表示されません。このMainメソッドは、アプリケーションを開始するために CLR によって呼び出され、毎回異なるプロセスで実行されます。

于 2012-06-15T05:06:00.340 に答える