我的代码中有一个调度程序函数,它在某个特定时间调用另一个函数,如下所示: -
private void timer_startTimer_Tick(object sender, EventArgs e)
{
Target10 currentTime = this;
currentTime.CurrentTime = currentTime.CurrentTime - 1;
this.txttimer.Text = string.Concat("0 : ", Convert.ToString(this.CurrentTime));
if(CurrentTime == 0)
timer_startTimer.Stop();
if (CuurentTime == 10)
{
getResult();
}
}
如上面的代码所述,我的函数timer_startTimer_Tick
将在10秒后调用函数getResult
。函数getResult()
将需要一些时间才能完成。如何在不等待完成timer_startTimer_Tick
功能的情况下继续我的父函数getResult
?
答案 0 :(得分:3)
将方法调用包装在任务中。
Task.Run(() => getResult());
答案 1 :(得分:2)
您可以使用Threads对象来完成这项工作。
定义:
private Thread thread;
private Queue<Action> queue; // The Action Queue
将上面的代码放在类构造函数中:
thread = new Thread(new ThreadStart(delegate {
while (true)
{
if (queue.Count > 0)
queue.Dequeue()(); //This command takes the function of the queue and executes it
}
}));
queue = new Queue<Action>(); // Instanciate the queue
thread.Start();
在他的计时器中,不是调用函数,而是将它放在队列中:
...
if (CuurentTime == 10)
{
queue.Enqueue(getResult); //no parenthesis
}
...
或者您可以使用异步方法。看看这个网站:
http://www.dotnetperls.com/async
http://www.codeproject.com/Tips/591586/Asynchronous-Programming-in-Csharp-using-async
真诚地建议您了解异步方法的解决方案
答案 2 :(得分:1)
您可以使用Task
(导入System.Threading.Task)或async / await模式的某些实现。最简单的方法是Task.Run(() => getResult());
,它将在后台启动getResult()
。