如何在不等待C#中的被调用函数完成的情况下继续执行函数

时间:2015-03-23 17:44:50

标签: c# wpf

我的代码中有一个调度程序函数,它在某个特定时间调用另一个函数,如下所示: -

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

3 个答案:

答案 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()