先看代码,foreach动态创建多个timer控件,用以定时执行xxx函数
string MySites="a|b|c"; foreach (string str in MySites.Split('|'))
{
System.Timers.Timer myTimerks = new System.Timers.Timer();
myTimerks.Interval = 500;//半秒一次xxx函数
myTimerks.Enabled = true;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str);//将参数a,b,c分别传递给函数xxx
};
myTimerks.Start();
Thread.Sleep(1000);//为避免太快,sleep下。注意,去掉Sleep结果将会是只剩下c。a,b被跳过,调整Sleep的值,可能会出现,a重复3次,B重复一次等各种结果。我要含有a,b,c参数的xxx函数只执行一次
}
//xxx函数将a,b,c字符后面依次加上1,2,3
public void xxx(object car) {
for (int i = 1; i < 4; i++)
{
Console.Write(car.ToString() + i.ToString() + "-----\r\r");
}
}以上代码是foreach一个字符串,然后动态创建一个timer,这个timer定时执行一个函数
如果foreach的时候不Sleep那得到的结果就是c1,c2,c3。a,b被跳过 调整foreach里的Sleep的值能得到各种莫名其妙的结果我只想含有a,b,c的xxx函数分别只执行一次,怎么办?好像是创建控件需要时间,无论怎样,怎么解决这个问题呢
string MySites="a|b|c"; foreach (string str in MySites.Split('|'))
{
System.Timers.Timer myTimerks = new System.Timers.Timer();
myTimerks.Interval = 500;//半秒一次xxx函数
myTimerks.Enabled = true;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str);//将参数a,b,c分别传递给函数xxx
};
myTimerks.Start();
Thread.Sleep(1000);//为避免太快,sleep下。注意,去掉Sleep结果将会是只剩下c。a,b被跳过,调整Sleep的值,可能会出现,a重复3次,B重复一次等各种结果。我要含有a,b,c参数的xxx函数只执行一次
}
//xxx函数将a,b,c字符后面依次加上1,2,3
public void xxx(object car) {
for (int i = 1; i < 4; i++)
{
Console.Write(car.ToString() + i.ToString() + "-----\r\r");
}
}以上代码是foreach一个字符串,然后动态创建一个timer,这个timer定时执行一个函数
如果foreach的时候不Sleep那得到的结果就是c1,c2,c3。a,b被跳过 调整foreach里的Sleep的值能得到各种莫名其妙的结果我只想含有a,b,c的xxx函数分别只执行一次,怎么办?好像是创建控件需要时间,无论怎样,怎么解决这个问题呢
string MySites="a|b|c"; foreach (string str in MySites.Split('|'))
{
System.Timers.Timer myTimerks = new System.Timers.Timer();
myTimerks.Interval = 1000;//半秒一次xxx函数
myTimerks.Enabled = true;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str);//将参数a,b,c分别传递给函数xxx
};
myTimerks.Start();
Thread.Sleep(3000);//为避免太快,sleep下。注意,去掉Sleep结果将会是只剩下c。a,b被跳过,调整Sleep的值,可能会出现,a重复3次,B重复一次等各种结果。我要含有a,b,c参数的xxx函数只执行一次
myTimerks.Close();
}
public void xxx(object car)
{
for (int i = 1; i < 4; i++)
{
Thread.Sleep(1000);
Console.Write(car.ToString() + i.ToString() + "-----\r\r");
}
}
foreach(.......)
myTimerks.Close();//直接关闭就不会有任何函数执行了这样不执行任何函数。。
都解释了的,foreach动态创建多个timer控件,每个timer定时执行一个函数
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str);//将参数a,b,c分别传
Thread.Sleep(3000);//为避免太快,sleep下。注意,去掉Sleep结果将会是只剩下c。a,b被跳过,调整Sleep的值,可能会出现,a重复3次,B重复一次等各种结果。我要含有a,b,c参数的xxx函数只执行一次
}
如果不关的话会不停的执行C1,c2,c3
你拷过去我的代码运行下试试
就是不知道每个timer是否执行完了,你如果Sleep时间太长是没问题,关键是我不想等
如果参数非常多a,b,c,d,e.....就要Sleep N长时间,而且也不知道N多长,还是会异常。。
{
System.Timers.Timer myTimerks = new System.Timers.Timer();
myTimerks.Interval = 500;//半秒一次xxx函数
myTimerks.Enabled = true;
var str1 = str;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str1);//将参数a,b,c分别传递给函数xxx
};
myTimerks.Start();
}
foreach (string str in MySites.Split('|'))
{
System.Timers.Timer myTimerks = new System.Timers.Timer();
myTimerks.Interval = 500;//半秒一次xxx函数
myTimerks.Enabled = true;
string tmp = str;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), tmp);
};
myTimerks.Start(); }
foreach (string str in MySites.Split('|'))
{
myTimerks = new System.Timers.Timer();
myTimerks.Interval = 500;//半秒一次xxx函数
myTimerks.Enabled = true;
myTimerks.Elapsed += delegate
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xxx), str);//将参数a,b,c分别传递给函数xxx
myTimerks.Enabled = false;
};
myTimerks.Start();
Thread.Sleep(1000);//为避免太快,sleep下。注意,去掉Sleep结果将会是只剩下c。a,b被跳过,调整Sleep的值,可能会出现,a重复3次,B重复一次等各种结果。我要含有a,b,c参数的xxx函数只执行一次
}