C# Thread.Join()用法的理解

来源:互联网 发布:域名不续费会怎么样 编辑:程序博客网 时间:2024/06/15 19:19

Thread.Join()的好处主要体现在对顺序流的控制,当一个操作流涉及到很多步骤并且要求严格的先后顺序,这个时候Thread.Join()起到了用场。

    首先,简单的介绍Thread.Join()的定义:指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行.这里对于定义不做过多的解释,直接看在具体项目中的使用。

    简单的说一下我在项目使用的场景:后台系统有一个在线生成exe的功能,exe需要一些固定的js、css等文件,所以第一步是对文件进行复制,然后进行md5的计算生成下载xml文件供客户端下载,最后压缩所有的文件。

这个功能的实现我们使用了Thread.Join()。

  ///
        /// 生成exe第一个线程,主要用来复制必要的文件
        ///
        ///
        public void CopyFiles(object quePlanId)
        {
            RecordLog.writeFile(LogTypeEnum.Xml, "线程生成exe,第一步生成exe模板以及必要文件开始:--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
            DateTime begin = DateTime.Now;

           //......................................................................具体实现方法

 

 


                   }
        ///
        /// 计算md5值得线程,在这里使用线程调用CopyFiles()方法,在复制文件结束之后才可以执行本方法
        ///
        ///
        public void StartWork(object quePlanId)
        {
            //复制必要文件

            //启动线程使用带参数的委托
            System.Threading.Thread copyFiles = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(CopyFiles));
            copyFiles.Name = "复制文件";
            copyFiles.Start(quePlanId);
            copyFiles.Join();

            RecordLog.writeFile(LogTypeEnum.Xml, "复制文件线程结束--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
            RecordLog.writeFile(LogTypeEnum.Xml, "开始执行计算md5值线程--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");
            DateTime begin = DateTime.Now;
            RecordLog.writeFile(LogTypeEnum.Xml, "生成exe第三步计算所有下载文件的MD5值开始:--'" + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "'");

//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

                   }


        public ActionResult ThreadGenerate()
        {

           ////启动线程使用带参数的委托

            System.Threading.Thread x = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(StartWork));
            x.Name = "StartWork";
            x.Start(339);
            return View();
        }

0 0
原创粉丝点击