当前位置:首页 > 代码相关 > 正文内容

C# 多线程(2)

admin4个月前 (01-15)代码相关123

Thread类中的join方法:

微软官方解释Join 一个同步方法,该方法阻止调用线程 (即,调用方法的线程) ,直到 Join 调用方法的线程完成。 使用此方法可以确保线程已终止。

using System;
using System.Threading;

namespace _20210115线程
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程线程ID为:" + Thread.GetCurrentProcessorId());
            Thread thread = new Thread(new ParameterizedThreadStart(StartCode));
            thread.Start("Hello");
            //thread.Join();

            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(100);
                Console.WriteLine("主线程中循环{0}", i);
            }
            Console.WriteLine("主线程调用完毕。");

            Console.ReadKey();
        }

        public static void StartCode(object o)
        {
            Console.WriteLine("StartCode方法开始。");
            Console.WriteLine("方法线程ID为:" + Thread.GetCurrentProcessorId());
            Console.WriteLine("StartCode方法输入的参数o是:{0}", o);
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(100);
                Console.WriteLine("StartCode方法中循环{0}", i);
            }
            Console.WriteLine("StartCode方法结束。");
        }
    }
}

thread.Join();

这句注释掉时结果如下:

image.png

加上这句后结果如下:在StartCode这个函数的线程执行时主线程(main)是阻塞的,方法线程结束后主线程继续执行。

image.png

版权声明:本文由cyhu's essay发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=112

相关文章

C# 属性,get,set使用

属性反映了状态,是对字段的自然扩展。下面的代码,有一个学生类,类中有年龄属性,通过get,set对年龄进行值的获取与设置,同时对年龄进行约束,使值控制在0-120之间,否则抛出异常信息。namespa...

C语言结构体

C语言的结构(struct)是一种复杂的数据类型,可以包含多种数据类型,基本类型都能包含,但是不能包含函数,这是和C++中的结构不同的地方,但是可以包含函数指针,但是这也并不矛盾,因为本身指针指向的是...

GDAL使用(五)

GDAL使用(五)

在之前说的GDALWarp.exe程序的参数中有个校正选项,[-order n | -tps | -rpc | -geoloc],这里说一下geoloc校正。这里的内容还是参考李民录老师的书以及GDA...

C# Lambda表达式

简单用法,一句一句来,便于理解 Func<int, int, int> func = new Func<int, int, int>((int a, int b) =...

C#(或者Java)反转数组

将原数组反转,如[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]反转后变为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]因为数组是引用类型,所以直接在方法中处理即可,C#和J...

GDAL使用(六)

矢量数据的读取与栅格数据的读取类似,但矢量数据定位明显,属性隐含,几何形状和属性要分开读取。基本流程如下:注册驱动。使用GDALAllRegister函数。打开数据集。使用GDALOpenEx函数。打...