C#多线程
  WDCdPJue8CCV 2023年12月10日 43 0

记录一下初接触多线程学到的创建多线程,感觉有点像调用方法,但是不同的是可以同时进行不用排队了,可不是嘛,多线程的作用就是这样啊,哈哈哈哈哈,看看我找的代码

using System;
using System.Threading;

namespace MultithreadingApplication
{
    class ThreadCreationProgram
    {

        static void Main(string[] args)
        {
            ThreadStart childref = new ThreadStart(CallToChildThread);
            Console.WriteLine("Main:创建子线程");
            Thread childThread = new Thread(childref);
            childThread.Start();
            // 停止主线程一段时间
            Thread.Sleep(2000);
            // 现在中止子线程
            Console.WriteLine("Main:中止子线程");
            childThread.Abort();
            Console.ReadKey();
        }

        public static void CallToChildThread()
        {
            try
            {
                Console.WriteLine("子线程开始");
                // 计数到 10
                for (int counter = 0; counter <= 10; counter++)
                {
                    Thread.Sleep(500);
                    Console.WriteLine(counter);
                }
                Console.WriteLine("子线程完成");
            }
            catch (ThreadAbortException e)
            {
                Console.WriteLine("线程中止异常");
            }
            finally
            {
                Console.WriteLine("无法捕获线程异常");
            }

        }
    }
}

这串代码是在控制台写的,在这里

C#多线程_主线程

进去后有个默认的类,把里边的代码删掉粘贴上这段代码按F5就可以看到运行结果 ,我这里好像出了点错误,但是可以证明确实是多线程运行了

C#多线程_Click_02

 其中输出0、1、2都是子线程的方法,他们是在主线程休息那2秒钟的期间输出的,如果不理解可以这样改一下看看效果

C#多线程_子线程_03

这里就是关掉线程,把 CallToChildThread当做一个普通方法来调用,就不会存在在主线程休息的时候执行CallToChildThread()方法

CallToChildThread()方法会等主线程执行完毕之后,也就是输出“Main:中止子线程”之后再开始陆续输出0—10,执行结果是这样

C#多线程_Click_04

现在明白了吧,没错我明白了哈哈哈

 还有这个应该是线程被中止时可以捕获到吧,但是我不知道为什么没执行成功

C#多线程_Click_05

关于ThreadStart和Thread的区别关系,可以看一下这段

//以下称为前者  
   ThreadStart childref = new ThreadStart(CallToChildThread);
    Thread childThread = new Thread(childref);
    //以下称为后者
   Thread childThread = new Thread(CallToChildThread);

两者是没有任何区别的。
前者是c#的语法。后者是编译器帮改的;
.net中根本不支持 new Thread(childref); 这种代码是c#编译器支持的。

也就是说C#编译器把你写的不支持.net的东西(后者)编译成支持.net的(前者)然后再.net上运行。
在C#中,线程入口是通过ThreadStart代(delegate)来提供的,可以把ThreadStart理解为一个函数指针,指向线程要执行的函数

当调用C# Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。

ThreadStart是一个委托。虽然它叫Thread,但是它其实是一个普普通通的委托类型。
就好比
button1.Click += button1_Click;

button1.Click += new EventHandler(button1_Click);

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月10日 0

暂无评论

推荐阅读
WDCdPJue8CCV