我在.net 2.0中使用C#在多線程應用程序上使用System.Timers。 每個線程都應該爲其定時器已用事件設置不同的時間間隔。計時器間隔在線程之間混合
這裏是我的情況:
我有一個根文件夾說:d:// ThreadingDemo /客戶端。現在,Clients文件夾可以包含n個文件夾。假設:1和2(在實際情況下等於客戶端數量)。在每個文件夾中都有一個xml配置文件(具有客戶特定的細節)。
配置爲1:
應用程序名:甲
TimeInterval所::5000
配置爲2:
應用程序名稱爲客戶端1
ClientCode應用支持:應用程序支持[R客戶端2
ClientCode:乙
TimeInterval所:2000
現在我的應用程序創建的線程多達客戶端的數量。在這種情況下,2個線程並在線程內設置時間間隔。
線程1與5000毫秒的間隔和線程2與2000毫秒
是我上工作的代碼:
命名空間ConsoleApplication3
{
class Program
{
static string location = "D:\\ThreadingDemo\\Clients\\";
public static System.Timers.Timer emailTriggerTimer = new System.Timers.Timer();
static Double timeinterval;
static void Main(string[] args)
{
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(location);
Thread th;
foreach (System.IO.DirectoryInfo g in dir.GetDirectories())
{
th = new Thread(() => DoWork(g.Name)); //** Passes CLIENT NAME to the method
th.Name = g.Name;
th.Start();
Console.WriteLine(" ThreadStart - ClientName : " + g.Name + " " + DateTime.Now);
}
Console.ReadKey();
}
public static void DoWork(string fname)
{
emailTriggerTimer.Interval = GetsExecutionTimeFromConfigFile(); //** Gets Client specific FIRST EXECUTION TIME and converts to Time Interval
emailTriggerTimer.Elapsed += new System.Timers.ElapsedEventHandler((sender, e) => emailTriggerTimer_Elapsed(sender, e, fname));
emailTriggerTimer.Enabled = true;
emailTriggerTimer.AutoReset = true;
emailTriggerTimer.Start();
Console.WriteLine(" DoWork - ClientName :" + fname + " " + DateTime.Now);
}
private static object emailTriggerTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, string fname)
{
emailTriggerTimer.Stop();
emailTriggerTimer.Enabled = false;
Console.WriteLine(fname + " Elapsed " + DateTime.Now);
emailTriggerTimer.Interval = GetsTimeIntervalFromConfigFile(); //** Gets Client specific TIME INTERVAL
emailTriggerTimer.Start();
emailTriggerTimer.Enabled = true;
}
}
}
我的代碼肯定是搞砸定時器的時間間隔,並設置最後的定時器時間間隔線程,即2000毫秒,這裏是下面的輸出:
的ThreadStart - CMDCMDLINE:1周27/06/2013 12時13分12秒
的ThreadStart - CMDCMDLINE:2 27/06/2013 12時13分12秒
DoWork的 - CMDCMDLINE:1個27/06/2013十二時13分12秒
DoWork的 - CMDCMDLINE:2 27/06/2013十二時13分12秒
CMDCMDLINE:1消逝27/06/2013 12: 13:13
CMDCMDLINE:2]經過27/06/2013 12點13分13秒
CMDCMDLINE:1消逝27/06/2013 12時13分15秒
CMDCMDLINE:2]經過27/06/2013 12:13: 15
CMDCMDLINE:1消逝27/06/2013 12點13分17秒
CMDCMDLINE:2]經過27/06/2013 12點13分17秒
CMDCMDLINE:1消逝27/06/2013 12:13:19
Clien TNAME:2]經過27/06/2013 12點13分十九秒
CMDCMDLINE:1消逝27/06/2013 12時13分21秒
CMDCMDLINE:2消逝27/06/2013 12時13分21秒
CMDCMDLINE:1消逝27/06/2013十二時13分23秒
CMDCMDLINE:2上經過27/06/2013十二時13分23秒
我非常新使用定時器線程的概念。我會很感激,如果有人建議如何設置每個線程的時間間隔分開。謝謝!
您使用的是同一個定時器所有線程! –
謝謝你指出。但是結果中的時間間隔仍然不合適。 – NewTechie