我希望每次if
语句为true
时创建一个新的倒计时器,它应该像这样工作:
例如:
List<int> intList = new List<int>();
foreach(a in b)
{
if(a==1)
{
intList.Add(a.somevalue)
//should create a new countdown timer for 1 hour and once the time is finished, it
should remove the added value from the list
}
}
我如何实现这一目标?
感谢。
答案 0 :(得分:5)
好吧,首先,我们真的不应该从不同的线程修改List
,所以这使我们能够确保所有定时事件都通过单个线程,或者应用它们我们拥有某种类型的同步,或者我们改为使用不同的数据结构,这些数据结构可以从多个线程中使用。
至于在一小时内实际做某事,虽然你可以使用Timer
,Task.Delay
非常适合这里:
List<int> list = new List<int>();
object key = new object();
foreach (int a in b)
if (a == 1)
{
var value = GetValue(a);
list.Add(value);
Task.Delay(TimeSpan.FromHours(1))
.ContinueWith(t => { lock (key)list.Remove(value); });
}
答案 1 :(得分:0)
有许多链接可以帮助您:)
Is there a way to have a countdown timer while waiting for input?
然后你可以创建一个可以保存对你的计时器的引用的并发包。
答案 2 :(得分:-3)
最简单的答案:
var value = a.someValue;
new Thread(() => { Thread.Sleep(60 * 60 * 1000); intList.Remove(value); }).Start();
但实际上你会想要保存线程引用,以便以后可以在需要时中断它。特别是如果有后台线程运行,你的程序将不会退出。