【发布时间】:2014-06-23 17:04:02
【问题描述】:
很清楚:例如,想象一下我的表单中的一个按钮。当用户点击按钮时,一些 void 方法应该在 30 秒后运行。
会有一个 void 方法DoAfterDelay 接受两个输入参数。第一个是要做的方法(使用委托),另一个是时间间隔。所以我会有:
public delegate void IVoidDelegate();
static void DoAfterDelay(IVoidDelegate TheMethod, TimeSpan Interval)
{
// *** Some code that will pause the process for "Interval".
TheMethod();
}
所以,我只需要一段代码来将进程暂停特定的时间间隔。到目前为止,我使用此代码来执行此操作:
System.Threading.Thread.Sleep(Interval);
但是这段代码对我没有好处,因为它会停止整个过程并冻结程序。我不希望程序卡在DoAfterDelay 方法中。这就是Thread.Sleep 没用的原因。
那么有人可以提出更好的方法吗?当然,我已经对此进行了搜索,但我发现的大多数解决方案都是基于使用计时器(例如here)。但是使用计时器是我最后的意见,因为该方法应该运行一次并且使用计时器会使程序难以阅读。因此,如果有的话,我正在寻找更好的解决方案。或者我必须使用计时器?
我想我必须玩线程,但不确定。所以我想知道是否有人可以指导我找到解决方案。提前致谢。
【问题讨论】:
标签: c# multithreading winforms timer