如何保持线程运行而不是在函数完成时终止

时间:2015-05-06 09:27:59

标签: c# asp.net multithreading

我有这个帖子,我不希望它在完成一个函数时自行终止它。相反,我希望之后再给它一个功能。 `

android.content.DialogInterface.OnKeyListener

2 个答案:

答案 0 :(得分:1)

您可以在线程委托中调用两个函数,如

t1 = new Thread(() =>{ test();test2();});

如果要重复执行测试代码,则可以在Test()中使用循环。如果您想在任何间隔后重复执行某些操作,也可以使用Timer

如果您想使用已创建的线程来节省线程创建成本,那么您可以使用ThreadPool

ThreadPool

  

许多应用程序创建花费大量时间的线程   睡眠状态,等待事件发生。其他线程可能   进入睡眠状态只是为了周期性地唤醒以进行轮询   更改或更新状态信息。线程池使您可以   通过为应用程序提供池来更有效地使用线程   系统管理的工作线程MSDN

答案 1 :(得分:0)

如果您使用的是.Net 4或更高版本,则可以使用Task代替线程,然后使用Task.ContinueWith()实现此目的。

以下是一个例子:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    static class Program
    {
        private static void Main()
        {
            var task = Task.Run(() => task1());
            task = task.ContinueWith(antecedant => task2());

            Console.WriteLine("Waiting for composite task to complete.");
            task.Wait();
            Console.WriteLine("Composite Task completed.");
        }

        private static void task1()
        {
            Console.WriteLine("Starting task 1");
            Thread.Sleep(2000);
            Console.WriteLine("Ending task 1");
        }

        private static void task2()
        {
            Console.WriteLine("Starting task 2");
            Thread.Sleep(2000);
            Console.WriteLine("Ending task 2");
        }
    }
}

如果您使用此方法,则无需等待第一个任务完成,然后再将其分配给另一个任务。