`

C#/.NET主线程与子线程之间的关系

    博客分类:
  • C#
阅读更多
以前一直没有在程序中写过总结,再翻开程序时却不知所云,所以我决定写总结
        一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程。
      有的博客上说“至少一个主线程”,这一说法持有怀疑
         主线程与子线程之间的关系
         **默认情况,在新开启一个子线程的时候,他是前台线程,只有,将线程的IsBackground属性设为true;他才是后台线程
         *当子线程是前台线程,则主线程结束并不影响其他线程的执行,只有所有前台线程都结束,程序结束
         *当子线程是后台线程,则主线程的结束,会导致子线程的强迫结束
            (个人理解,这样设计的原因:因为后台线程一般做的都是需要花费大量时间的工作,如果不这样设计,主线程已经结束,而后台工作线程还在继续,第一有可能使程序陷入死循环,第二主线程已经结束,后台线程即时执行完成也已经没有什么实际的意义)
        
         实例代码:
        
static Thread Mainthread;  //静态变量,用来获取主线程
      static void Main(string[] args)
        {
           Mainthread= Thread.CurrentThread;//获取主线程
           Test1();
          }
 private static void Test1()
        {
            Console.WriteLine("在主进程中启动一个线程!");
            Thread firstChild = new Thread(new ParameterizedThreadStart(ThreadProc));//threadStart 是一个委托,代表一个类型的方法
            firstChild.Name = "线程1";
            firstChild.IsBackground = true;
            firstChild.Start(firstChild.Name);//启动线程
            Thread secondChild = new Thread(new ParameterizedThreadStart(ThreadProc));
            secondChild.Name = "线程2";
            secondChild.IsBackground = true;
            secondChild.Start(secondChild.Name);
            Console.WriteLine("主线程结束");
            Console.WriteLine(Mainthread.ThreadState);
            Mainthread.Abort();
        }
        private static void ThreadProc(object str)
        {
            
            for (int i = 0; i < 10; i++)
            {
               
                Console.WriteLine(Mainthread.ThreadState);
                Console.Write(str+"调用ThreadProc: " + i.ToString() + "\r\n");
                if (i == 9)
                    Console.WriteLine(str + "结束");
                Thread.Sleep(2000);//线程被阻塞的毫秒数。0表示应挂起此线程以使其他等待线程能够执行
            }
        }
分享到:
评论

相关推荐

    如何从子线程更新主线程数据实例C#.net源代码编写

    本实例将探讨如何在C#.NET中从子线程安全地更新主线程数据。 在Windows应用程序中,主线程通常是UI线程,负责处理用户交互和更新UI元素。子线程则常用于执行长时间运行的任务,以避免阻塞UI。但直接在子线程中修改...

    C# 主线程显示数据,子线程获取数据

    在C# Winform应用开发中,主线程与子线程的协同工作是一项核心技能,尤其在处理耗时操作,如数据库查询、网络通信等时,更显得至关重要。本主题聚焦于如何利用“异步委托”在主线程中显示数据,同时在子线程中获取...

    C#(asp.net)多线程用法示例(可用于同时处理多个任务)

    `Thread.Join()`方法则用来等待指定线程结束,确保主线程不会在子线程完成之前继续执行。 需要注意的是,当在ASP.NET环境中使用多线程时,必须谨慎处理资源的同步问题,因为Web应用程序的请求是异步的,多个线程...

    如何使用主线程异常捕获错误例子C#.net源代码编写

    本文将详细探讨如何在C#.NET中编写源代码来捕获主线程的错误。 首先,我们需要了解C#中的异常处理结构。异常处理通常通过`try-catch`块来实现,它可以捕获并处理在`try`块内抛出的任何异常。但是,对于主线程的异常...

    C#/.Net WinForm窗口遮罩层工具实例(可直接使用),效果类似于网页的菊花转转的遮罩效果

    6. **异步编程**:在.NET Framework中,我们可以使用`BackgroundWorker`组件或异步编程模型(如async/await关键字)来执行后台任务,这样主线程不会被阻塞,用户界面依然保持响应。 7. **兼容性和性能**:考虑到...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    8. **异常处理**:在多线程环境中,每个线程都有自己的异常处理机制,主线程不能直接捕获子线程的异常。因此,必须在子线程内部进行适当的异常处理。 9. **线程局部存储**:`ThreadLocal&lt;T&gt;`类允许在线程中创建局部...

    C#子线程执行完后通知主线程的方法

    在C#编程中,多线程是常见的并发执行方式,其中主线程通常负责应用程序的主逻辑,而子线程则可以执行一些独立的任务。当子线程完成其工作后,有时需要通知主线程以便进行下一步操作。本文将详细介绍如何在C#中实现...

    C# 线程更新UI界面

    特别是在UI(用户界面)开发中,为了保证界面的流畅性,通常我们会将耗时操作放在后台线程进行,而更新UI则需要在主线程(也称为UI线程)中完成。这是因为UI控件不是线程安全的,多个线程并发访问可能导致数据不一致...

    c#.net写的调用多线程小程序

    在IT行业中,多线程是程序设计中的一个重要概念,尤其在C#.NET框架下,它允许开发者创建并行处理的任务,提升程序的执行效率。本文将深入探讨如何使用C#.NET编写一个调用多线程的小程序,以及如何实现同时开启多个...

    基恩士激光位移传感器C#/C++/VB.net的demo

    2. 异步编程:为了不阻塞主线程,可以使用异步编程模型(如C#的async/await或VB.NET的Async/Await)来调用传感器API,提高程序响应性。 3. 数据格式转换:根据传感器返回的数据格式,可能需要进行二进制数据解析或...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    C#.NET还提供了`Thread.Join()`方法让主线程等待子线程完成,以及`ThreadPool`用于高效管理短生命周期的线程。`Interlocked`类提供原子操作,如`Increment`、`Decrement`,确保线程安全的计数。 4. **异步编程** ...

    C#.net多线程画线进度

    在C#.NET编程中,多线程是一种常见技术,它允许程序同时执行多个任务,以提高应用程序的效率和响应性。在本项目“C#.net多线程画线进度”中,我们关注的是如何在多线程环境中进行图形界面(GUI)的更新,特别是涉及...

    C#.NET多线程实例代码教程

    本教程" C#.NET多线程实例代码教程 "是一个深入实践的资源,旨在帮助开发者理解并掌握C#中的多线程编程。 一、多线程基础 多线程是现代软件开发中的重要概念,它允许程序同时执行多个不同的任务。在C#.NET中,可以...

    C#.NET多线程实例25个,文档6篇

    9. **线程异常处理**:主线程默认捕获不了子线程抛出的异常,因此在多线程编程中,每个线程都需要有自己的异常处理机制。 10. **线程安全的数据访问**:当多个线程访问共享数据时,必须确保数据的完整性。`volatile...

    C#多线程编程 四个显示线程计算结果的函数

    在标题提到的"四个显示线程计算结果的函数"中,这通常指的是在多线程环境下,如何在主线程(通常是UI线程)中安全地更新界面以展示从属线程计算的结果。 在描述中,提到的问题是关于从属线程如何在主界面上显示中间...

    谈谈在.NET下的多线程编程

    这意味着,一旦应用程序的主线程结束,所有的后台线程也会随之结束。 线程可以通过设置`IsBackground`属性来指定是前台线程还是后台线程,默认情况下,线程为前台线程。下面的示例代码展示了如何创建10个后台线程:...

    Visual C#.NET网络编程及代码

    通过学习本书,开发者不仅能掌握Visual C#.NET的网络编程基础,还能了解到高级主题,如多线程、套接字选项、网络流处理以及安全网络通信等。结合提供的代码示例,读者将能够独立设计和实现复杂的网络应用程序,满足...

    一个基于C#实现的完美解决在多线程中异常处理的程序代码

    5. **事件和委托**:创建一个事件来监听线程的异常,可以在主线程中处理来自其他线程的异常。使用`Thread.UnhandledException`事件可以捕获未处理的线程异常,但这仅适用于桌面应用,不适用于Web应用或服务。 6. **...

    如何创建带参数多线程程序实例C#.net源代码编写

    主线程创建并启动子线程,子线程在接收到参数后进行处理并打印消息。 总结,创建带参数的多线程程序是C#.NET编程中常用的技术,通过合理的多线程设计,可以有效利用系统资源,提升程序性能。同时,理解并掌握线程...

Global site tag (gtag.js) - Google Analytics