以前一直没有在程序中写过总结,再翻开程序时却不知所云,所以我决定写总结
一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程。
有的博客上说“至少一个主线程”,这一说法持有怀疑
主线程与子线程之间的关系
**默认情况,在新开启一个子线程的时候,他是前台线程,只有,将线程的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中从子线程安全地更新主线程数据。 在Windows应用程序中,主线程通常是UI线程,负责处理用户交互和更新UI元素。子线程则常用于执行长时间运行的任务,以避免阻塞UI。但直接在子线程中修改...
在C# Winform应用开发中,主线程与子线程的协同工作是一项核心技能,尤其在处理耗时操作,如数据库查询、网络通信等时,更显得至关重要。本主题聚焦于如何利用“异步委托”在主线程中显示数据,同时在子线程中获取...
`Thread.Join()`方法则用来等待指定线程结束,确保主线程不会在子线程完成之前继续执行。 需要注意的是,当在ASP.NET环境中使用多线程时,必须谨慎处理资源的同步问题,因为Web应用程序的请求是异步的,多个线程...
本文将详细探讨如何在C#.NET中编写源代码来捕获主线程的错误。 首先,我们需要了解C#中的异常处理结构。异常处理通常通过`try-catch`块来实现,它可以捕获并处理在`try`块内抛出的任何异常。但是,对于主线程的异常...
6. **异步编程**:在.NET Framework中,我们可以使用`BackgroundWorker`组件或异步编程模型(如async/await关键字)来执行后台任务,这样主线程不会被阻塞,用户界面依然保持响应。 7. **兼容性和性能**:考虑到...
8. **异常处理**:在多线程环境中,每个线程都有自己的异常处理机制,主线程不能直接捕获子线程的异常。因此,必须在子线程内部进行适当的异常处理。 9. **线程局部存储**:`ThreadLocal<T>`类允许在线程中创建局部...
在C#编程中,多线程是常见的并发执行方式,其中主线程通常负责应用程序的主逻辑,而子线程则可以执行一些独立的任务。当子线程完成其工作后,有时需要通知主线程以便进行下一步操作。本文将详细介绍如何在C#中实现...
特别是在UI(用户界面)开发中,为了保证界面的流畅性,通常我们会将耗时操作放在后台线程进行,而更新UI则需要在主线程(也称为UI线程)中完成。这是因为UI控件不是线程安全的,多个线程并发访问可能导致数据不一致...
在IT行业中,多线程是程序设计中的一个重要概念,尤其在C#.NET框架下,它允许开发者创建并行处理的任务,提升程序的执行效率。本文将深入探讨如何使用C#.NET编写一个调用多线程的小程序,以及如何实现同时开启多个...
2. 异步编程:为了不阻塞主线程,可以使用异步编程模型(如C#的async/await或VB.NET的Async/Await)来调用传感器API,提高程序响应性。 3. 数据格式转换:根据传感器返回的数据格式,可能需要进行二进制数据解析或...
C#.NET还提供了`Thread.Join()`方法让主线程等待子线程完成,以及`ThreadPool`用于高效管理短生命周期的线程。`Interlocked`类提供原子操作,如`Increment`、`Decrement`,确保线程安全的计数。 4. **异步编程** ...
在C#.NET编程中,多线程是一种常见技术,它允许程序同时执行多个任务,以提高应用程序的效率和响应性。在本项目“C#.net多线程画线进度”中,我们关注的是如何在多线程环境中进行图形界面(GUI)的更新,特别是涉及...
本教程" C#.NET多线程实例代码教程 "是一个深入实践的资源,旨在帮助开发者理解并掌握C#中的多线程编程。 一、多线程基础 多线程是现代软件开发中的重要概念,它允许程序同时执行多个不同的任务。在C#.NET中,可以...
9. **线程异常处理**:主线程默认捕获不了子线程抛出的异常,因此在多线程编程中,每个线程都需要有自己的异常处理机制。 10. **线程安全的数据访问**:当多个线程访问共享数据时,必须确保数据的完整性。`volatile...
在标题提到的"四个显示线程计算结果的函数"中,这通常指的是在多线程环境下,如何在主线程(通常是UI线程)中安全地更新界面以展示从属线程计算的结果。 在描述中,提到的问题是关于从属线程如何在主界面上显示中间...
这意味着,一旦应用程序的主线程结束,所有的后台线程也会随之结束。 线程可以通过设置`IsBackground`属性来指定是前台线程还是后台线程,默认情况下,线程为前台线程。下面的示例代码展示了如何创建10个后台线程:...
通过学习本书,开发者不仅能掌握Visual C#.NET的网络编程基础,还能了解到高级主题,如多线程、套接字选项、网络流处理以及安全网络通信等。结合提供的代码示例,读者将能够独立设计和实现复杂的网络应用程序,满足...
5. **事件和委托**:创建一个事件来监听线程的异常,可以在主线程中处理来自其他线程的异常。使用`Thread.UnhandledException`事件可以捕获未处理的线程异常,但这仅适用于桌面应用,不适用于Web应用或服务。 6. **...
主线程创建并启动子线程,子线程在接收到参数后进行处理并打印消息。 总结,创建带参数的多线程程序是C#.NET编程中常用的技术,通过合理的多线程设计,可以有效利用系统资源,提升程序性能。同时,理解并掌握线程...