2012-02-05 32 views
1

複数のタイマー(システム)を作成する必要があるサービスを作成しています。作成するタイマーの数は、実行時まで認識されません。これは、外部(XML)設定ファイルの内容に基づいています。 各タイマーには異なるタスクと異なるインターバルが割り当てられます。複数のタイマーをすべて動的インスタンス名で作成する

どのようにしてx個のタイマーを動的に作成できますか?私は、クラスインスタンス名のforループからのカウントを使用したいが、私はこれを行う方法を理解することができないようだ。

現在のコードは、forループの最後の結果で1つのタイマーを作成します。私は各ループのタイマーを作成したい。

私はC#を学んでいますので、例が非常に役に立ちます。

var items = GetDownloadList(); 
int CountDownloadListItems = DownloadItemsCount(); 

for (int i = 0; i < CountDownloadListItems; i++) 
{ 
    if (ClassLib.UrlExists.Check(items[i, 2], items[i, 0])) 
    { 
     //new instance of timers 

     Timers downloadTimer = new Timers(); 
     downloadTimer.CreateTimer(items[i, 2], items[i, 3], items[i, 4], items[i, 0], items[i, 5], items[i, 6]); 

    } 
} 

// My Timers Class 

public class Timers 
{ 

    //timer 
    private Timer _timer = new Timer(); 
    private volatile bool _requestStop = false; 

    public Timers() 
    { 
     _timer.Interval = 20; 
     _timer.Elapsed += Timed; 
     _timer.AutoReset = false; 

    } 

    private string _Url; 
    private string _Save; 
    private string _File; 
    private string _Id; 
    private string _FreqValue; 
    private string _FreqUnit; 

    public string Url 
    { 
     get { return _Url; } 
     set { _Url = value; } 
    } 

    public string Save 
    { 
     get { return _Save; } 
     set { _Save = value; } 
    } 

    public string File 
    { 
     get { return _File; } 
     set { _File = value; } 
    } 

    public string Id 
    { 
     get { return _Id; } 
     set { _Id = value; } 
    } 

    public string FreqValue 
    { 
     get { return _FreqValue; } 
     set { _FreqValue = value; } 
    } 

    public string FreqUnit 
    { 
     get { return _FreqUnit; } 
     set { _FreqUnit = value; } 
    } 

    public void CreateTimer(string url, string save,string file,string id,string freqValue,string freqUnit) 
    { 
     this.Url = url; 
     this.Save = save; 
     this.File = file; 
     this.Id = id; 
     this.FreqValue = FreqValue; 
     this.FreqUnit = FreqUnit; 

     _timer.Interval = 2000; 
     _timer.Start(); 
    } 

    private void Timed(object source, ElapsedEventArgs e) 
    { 
     _timer.Stop(); 

     //StreamWriter sr = new StreamWriter("E:\\downloader\\"+Id+".txt"); 
     //sr.Write(Url+" "+Save+" "+File+"\n\n"); 
     //sr.Close(); 

     ClassLib.Update.File(Url,Save,File,Id); 

     _timer.Start(); 
    } 
} 
+0

「Timers」クラスはどこで定義されていますか?私のdownloadTimerクラス内の – JaredPar

+0

。私は本当に尋ねるものは、 'downloadTimer'の複数の、unqiueのインスタンスを作成する方法です – Damo

答えて

0

forループの各値に対して新しいTimersが作成されているようです。しかし、あなたはそれらを参照し続けるように見えません。

参照を格納する変数「名前」を追加するのはどうですか?

var timersDict = new Dictionary<string, Timers>(); 
var items = GetDownloadList(); 
int CountDownloadListItems = DownloadItemsCount(); 


for (int i = 0; i < CountDownloadListItems; i++) 
       { 
        if (ClassLib.UrlExists.Check(items[i, 2], items[i, 0])) 
        { 
         //new instance of timers 

         Timers downloadTimer = new Timers(); 
         downloadTimer.CreateTimer(items[i, 2], items[i, 3], items[i, 4], items[i, 0], items[i, 5], items[i, 6]); 
         timersDict.Add("Timer" + i, downloadTimer); 

        } 

       } 
+0

ありがとうございます。私は自分のコードが動作していることを認識しましたが、他の場所では偽のコードが混乱してしまいました。今働いている。私はまだそれらを参照することについて考えなかった。ありがとうございました。 – Damo

関連する問題