如何制作带超时功能的定时器
我有一个缓慢的方法,同时在计时器(System.Timers.Timer)上执行它。有时执行时间会比计时器的超时时间长,这会导致计时器等待。我想当我将计时器设置为 30 毫秒时,例如,30 毫秒后,重置该方法,而不是等待。我应该使用什么样的计时器?
编辑:
void OnTimerElapsed() {
SomeMethod(args1);
SomeMethod(args2);
SomeMethod(args3);
}
SomeMethod 位于另一个程序集中。这是一种从另一个应用程序请求数据的同步方法。我不知道为什么它有时会挂起。这会导致计时器暂停,直到 SomeMethod() 继续。
I have a slow method, while executing it on timer (System.Timers.Timer). It sometimes gets longer to execute than the timer's timeout, which causes the timer to wait. I want while I set the timer for 30ms for example, after 30ms, to reset the method, not wait. What kind of timer should I use?
EDIT:
void OnTimerElapsed() {
SomeMethod(args1);
SomeMethod(args2);
SomeMethod(args3);
}
SomeMethod is located in another assembly. It's a sync method which requests data from another application. I don't know why it sometimes hangs. That causes the timer to pause until SomeMethod() continues.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
System.Timers.Timer
并将其AutoReset
设置为 false,并且仅在前一个时间结束或在您的自定义条件下启动它。这是我使用的模式:编辑:如果您喜欢观看计时器并且操作需要较长时间,那么您不应该首先使用计时器,而是使用将您的操作包装在一个新线程中并使用
MaunalResetEvent
,使用其WaitOne
方法来指定超时,如果发生超时则停止或停止该操作。Use the
System.Timers.Timer
and set the itsAutoReset
to false, and only start it when the previous elapsed finished or at your custom condition. Here is the pattern that I use:Edit: If you like to watch the timer and if the operation takes longer time then you should not use timer in the first place, instead use wrap your operation in a new thread and use
MaunalResetEvent
, use itsWaitOne
method to specify the timeout, if the timeout occurs then stop or about the operation.