学习C#线程

Posted KMsama

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习C#线程相关的知识,希望对你有一定的参考价值。

2016-12-17 

无意间看到了关于C#线程的讲解。经过一下午的学习后,慢慢的对线程也有了一定的理解。这里讲解的是最基础的内容,包括线程的创建、睡眠、等待、终止。

实验环境:Visual studio 2010.

使用语言:C#

内容:创建、睡眠、等待、中止线程

1.创建新线程对象 Thread t=new Thread();

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 
 7 namespace 线程学习
 8 {
 9     class Program
10     {
11         static void PrintNumbers()
12         {
13 
14             Console.WriteLine("Starting...");
15             for (int i = 1; i < 10; i++)
16             {
17                 Console.WriteLine(i);
18             }
19         }
20 
21         static void Main(string[] args)
22         {
23             Thread t = new Thread(PrintNumbers);
24             t.Start();
25             PrintNumbers();
26         }
27     }
28 }
View Code

通过Thread t=new Thread创建新对象后,t为子线程,t.Start()开始执行子线程,子线程执行构造对象中的PrintNumber()函数,父线程执行下一行的PrintNumbers()函数,两线程并发,所以结果不定。

2.线程睡眠   调用Slee()函数,选择让线程暂时“睡眠“

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 线程学习
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i+"父线程");
            }
        }
        static void PrintNumbersWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                Console.WriteLine(i+"子线程");
            }
        }

        static void Main(string[] args)
        {
            Thread t = new Thread(PrintNumbersWithDelay);
            t.Start();
            PrintNumbers();
        }
    }
}
View Code

创建线程后,子线程t执行PrintNumbersWithDelay()函数,其中每循环一次就睡眠一秒,父线程执行下一行的PrintNumbers()函数,两线程并发执行。

3.线程等待 调用join()函数,让线程按照想要的顺序执行

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 namespace 线程学习
 7 {
 8     class Program
 9     {
10         static void PrintNumberWithDelay()
11         {
12             Console.WriteLine("Starting...");
13             for (int i = 1; i < 10; i++)
14             {
15                 Thread.Sleep(TimeSpan.FromSeconds(1));
16                 Console.WriteLine(i);
17             }
18         }
19         static void PrintNumbers()
20         {
21             Console.WriteLine("Starting...");
22             for (int i = 1; i < 10; i++)
23             {
24                 Console.WriteLine(i);
25             }
26         }
27         static void Main(string[] args)
28         {
29             Console.WriteLine("Starting...");
30             Thread t = new Thread(PrintNumberWithDelay);
31             t.Start();
32             t.Join();
33             PrintNumbers();
34             Console.WriteLine("Thread completed");
35         }
36     }
37 }
View Code

创建线程后,t.join()之后的语句(即父线程)必须等待之前的语句执行完后,才能执行。

4.线程终止 调用Abort()函数,杀死该线程。

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 线程学习
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }
        static void PrintNumberWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(TimeSpan.FromSeconds(1));

            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Starting Program..");
            Thread t = new Thread(PrintNumberWithDelay);
            t.Start();
            t.Abort();
            Console.WriteLine("A thread has been aborted");
            t = new Thread(PrintNumbers);
            t.Start();
            PrintNumbers();
        }
    }
}
View Code

使用Abort()结束子线程。后面的代码跟前面例一类似

以上是关于学习C#线程的主要内容,如果未能解决你的问题,请参考以下文章

C# Thread开启线程的几种方式

python小白学习记录 多线程爬取ts片段

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?