Mos*_*zán 14 c# multithreading timer winforms
很明显:例如,想象一下我的表格中的一个按钮.当用户单击该按钮时,某些void方法应在30秒后运行.
将有一个带有DoAfterDelay两个输入参数的void方法.第一个是要做的方法(使用委托),另一个是时间间隔.所以我会:
public delegate void IVoidDelegate();
static void DoAfterDelay(IVoidDelegate TheMethod, TimeSpan Interval)
{
// *** Some code that will pause the process for "Interval".
TheMethod();
}
Run Code Online (Sandbox Code Playgroud)
所以,我只需要一段代码来暂停特定时间间隔的过程.到目前为止,我使用此代码执行此操作:
System.Threading.Thread.Sleep(Interval);
Run Code Online (Sandbox Code Playgroud)
但是这段代码对我没有好处,因为它会停止整个过程并冻结程序.我不希望程序卡在DoAfterDelay方法中.这就是为什么Thread.Sleep没用.
所以有人可以提出更好的方法吗?当然我已经搜索过了,但我发现的大部分解决方案都是基于使用计时器(比如这里).但是使用计时器是我最后的意见,因为该方法应该运行一次并且使用计时器会使程序混淆读取.所以,如果有的话,我正在寻找更好的解决方案.或者我可能必须使用计时器?
我想我必须玩线程,但不确定.所以我想知道是否有人可以指导我找到解决方案.提前致谢.
Bar*_*icz 14
你能用任务吗?
Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(Interval);
TheMethod();
});
Run Code Online (Sandbox Code Playgroud)
Jim*_*non 13
您可以在此处使用.Net 4.5的异步等待功能
您可以使用Task.Delay以毫秒为单位给出延迟.这是一种非常干净的方式.例如:
private async void button1_Click(object sender, EventArgs e)
{
await Task.Delay(5000);
TheMethod();
}
Run Code Online (Sandbox Code Playgroud)