我想在我的应用程序中触发一个事件,该事件在白天的特定时间连续运行,比如下午4:00。我考虑每秒运行一次计时器,当时间等于下午4:00时运行事件。这样可行。但我想知道是否有办法只在下午4:00获得一次回调而不必一直检查。 最佳答案 使用System.Threading.Timer这样的事情怎么样?类(class)?vart=newTimer(TimerCallback);//Figurehowmuchtimeuntil4:00DateTimenow=DateTime.Now;DateTimefourOClock=DateTime.To
我正在尝试创建一个函数,它接受一个Action和一个超时,并在超时后执行该Action。该功能是非阻塞的。该函数必须是线程安全的。我也真的非常想避免使用Thread.Sleep()。到目前为止,我能做的最好的是:longcurrentKey=0;ConcurrentDictionarytimers=newConcurrentDictionary();protectedvoidExecute(Actionaction,inttimeout_ms){longcurrentKey=Interlocked.Increment(refcurrentKey);Timert=newTimer((ke
我正在尝试创建一个函数,它接受一个Action和一个超时,并在超时后执行该Action。该功能是非阻塞的。该函数必须是线程安全的。我也真的非常想避免使用Thread.Sleep()。到目前为止,我能做的最好的是:longcurrentKey=0;ConcurrentDictionarytimers=newConcurrentDictionary();protectedvoidExecute(Actionaction,inttimeout_ms){longcurrentKey=Interlocked.Increment(refcurrentKey);Timert=newTimer((ke
好吧,我已经搜索了很多解决方案。我正在寻找一种干净简单的方法来防止System.Threading.Timer的回调方法在我停止后被调用。我似乎找不到任何东西,这导致我偶尔求助于可怕的thread-thread.sleep-thread.abort组合。可以用lock来实现吗? 最佳答案 一个更简单的解决方案可能是将Timer设置为永不恢复;方法Timer.Change可以为dueTime和period取值,指示计时器永不重启:this.Timer.Change(Timeout.Infinite,Timeout.Infinite);
好吧,我已经搜索了很多解决方案。我正在寻找一种干净简单的方法来防止System.Threading.Timer的回调方法在我停止后被调用。我似乎找不到任何东西,这导致我偶尔求助于可怕的thread-thread.sleep-thread.abort组合。可以用lock来实现吗? 最佳答案 一个更简单的解决方案可能是将Timer设置为永不恢复;方法Timer.Change可以为dueTime和period取值,指示计时器永不重启:this.Timer.Change(Timeout.Infinite,Timeout.Infinite);
我有一个方法应该延迟指定的时间运行。我应该使用Threadthread=newThread(()=>{Thread.Sleep(millisecond);action();});thread.IsBackground=true;thread.Start();或者Timertimer=newTimer(o=>action(),null,millisecond,-1);我读过一些articles关于如何使用Thread.Sleep是糟糕的设计。但我真的不明白为什么。但是,为了使用Timer,Timer有一个dispose方法。由于执行延迟,我不知道如何处理Timer。你有什么建议吗?或者,
我有一个方法应该延迟指定的时间运行。我应该使用Threadthread=newThread(()=>{Thread.Sleep(millisecond);action();});thread.IsBackground=true;thread.Start();或者Timertimer=newTimer(o=>action(),null,millisecond,-1);我读过一些articles关于如何使用Thread.Sleep是糟糕的设计。但我真的不明白为什么。但是,为了使用Timer,Timer有一个dispose方法。由于执行延迟,我不知道如何处理Timer。你有什么建议吗?或者,
编写内联事件处理程序是不好的做法吗?对我来说,当我想在事件处理程序中使用局部变量时,我更喜欢使用它,如下所示:我更喜欢这个://ThisisjustasampleprivatevoidFoo(){Timertimer=newTimer(){Interval=1000};intcounter=0;//counterhasjustthismissiontimer.Tick+=(s,e)=>myTextBox.Text=(counter++).ToString();timer.Start();}取而代之的是:intcounter=0;//NoneedforthisoutofBoo&theev
编写内联事件处理程序是不好的做法吗?对我来说,当我想在事件处理程序中使用局部变量时,我更喜欢使用它,如下所示:我更喜欢这个://ThisisjustasampleprivatevoidFoo(){Timertimer=newTimer(){Interval=1000};intcounter=0;//counterhasjustthismissiontimer.Tick+=(s,e)=>myTextBox.Text=(counter++).ToString();timer.Start();}取而代之的是:intcounter=0;//NoneedforthisoutofBoo&theev
我知道在.NET有三种计时器类型(参见ComparingtheTimerClassesinthe.NETFrameworkClassLibrary)。我选择了一个线程计时器,因为如果主线程繁忙,其他类型可能会漂移,我需要它是可靠的。这个定时器在定时器控制中的工作方式是放在另一个线程上的,这样它就可以在父线程不忙的时候随着工作开始完成而一直滴答作响。控制台应用程序中此计时器的问题在于,当计时器在另一个线程上计时时,主线程不会对应用程序关闭执行任何操作。我尝试添加一个whiletrue循环,但是当计时器关闭时主线程太忙了。 最佳答案 您