c#之线程基础(一)

能够认为线程是一个虚拟进程,用于独立运行一个特定的程序。c#

1.使用c#建立线程函数

using System;
using System.Threading; //3

namespace MutiThreadDemo
{
    class Program
    {
        static void Main(string[] args)
        {
//5 Thread t
= new Thread(PrintNumber); t.Start(); PrintNumber(); Console.ReadLine(); } //4 static void PrintNumber() { Console.WriteLine("Starting ..."); for(int i = 1;i< 10; i++) { Console.WriteLine(i); } } } }

在上面的代码中,步骤4定义了方法 PrintNumber , 该方法会被主线程和新建立的线程使用。spa

在咱们构造一个线程时,ThreadStart 或 ParameterizedThreadStart 的实例委托会传给构造函数。操作系统

咱们只需指定在不一样线程运行的方法名,而 c# 编译器则会在后台建立这些对象。线程

 

运行结果:两组范围为1 -10的数字会随机交叉输出。这说明了PringNumber方法同时运行在主线程和另外一个线程。(若是10个数字随机交叉不明显,能够增长到100试试)code

 

2.暂停线程对象

 这里展现如何让一个线程等待一段时间而不用消耗操做系统资源。blog

using System;
using System.Threading;

namespace MutiThreadDemo
{
    class ThreadSleep
    {
        static void Main(string[] args)
        {
            Thread t = new Thread(PrintNumbersWithDelay);
            t.Start();
            PrintNumbers();
            Console.ReadLine();
        }

        static void PrintNumbers()
        {
            Console.WriteLine("Starting ...");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }

        static void PrintNumbersWithDelay()
        {
            Console.WriteLine("Starting ...");
            for(int i = 0; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(2));
                Console.WriteLine(i);
            }
        }
    }
}

在PrintNumbersWithDeplay方法中加入了Thread.Sleep方法调用。这会致使线程在执行该代码时,在打印任何数字以前会等待指定的时间(这里是2秒钟)。进程

3.线程等待资源

这里将展现如何让程序等待另外一个程序中的计算完成,而后在代码中使用该线程的计算结果

使用Thread.Sleep行不通,由于并不知道计算须要花费的具体时间。

using System;
using System.Threading;

namespace MutiThreadDemo
{
    class Thread_Join
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting ...");
            Thread t = new Thread(PrintNumbersWithDeplay);
            t.Start();
            t.Join();
            Console.WriteLine("Thread completed");
            Console.ReadLine();
        }

        static void PrintNumbersWithDeplay()
        {
            Console.WriteLine("Starting ...");
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(2));
                Console.WriteLine(i);
            }
        }

    }
}

运行结果:

 

 当程序运行时,启动了一个耗时较长的线程来打印数字,打印每一个数字前要等待两秒。

可是咱们在主程序中调用了 t.Join 方法,该方法容许咱们等待直到线程 t 完成。

当线程 t 完成时,主程序会继续运行。

借助该技术能够实如今两个线程间同步执行步骤。

4.终止线程

...

相关文章
相关标签/搜索