以前一直没有在程序中写过总结,再翻开程序时却不知所云,所以我决定写总结
一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程。
有的博客上说“至少一个主线程”,这一说法持有怀疑
主线程与子线程之间的关系
**默认情况,在新开启一个子线程的时候,他是前台线程,只有,将线程的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源代码编写
1.[主线程]:请求方发送请求,立即创建超时等待线程锁 2.[异步线程]:接收数据,数据包合并,数据包合并完成后向解锁主线程 3,[主线程]:超时则进入超时异常,接到异步线程的通知则进入后续业务 我们在使用时会发现,第...
VBnet源码,C#可用。分线程窗体,主线程卡死任然报告方法的进度值到UI窗体上面
.NET 4.0引入的一个新概念---任务,作为支持并行运算的重要...本资源文件中模拟一个插件的工作,在主线程中分配插件的任务,如果插件执行超时,则主线程中断任务,子线程中的任务完成时,则主线程中输出子线程的返回值
而涉及到线程控制的事件(如结束下载线程),为了确保事件处理能正常执行,则才采用主线程代理的方式处理。 这种代理方式是由于系统中直接操作线程引发的,如果改用系统线程池的话,可以重新定制处理流程。
而涉及到线程控制的事件(如结束下载线程),为了确保事件处理能正常执行,则才采用主线程代理的方式处理。 这种代理方式是由于系统中直接操作线程引发的,如果改用系统线程池的话,可以重新定制处理流程。
但是对于.NET的客户端程序(Console,WPF,WinForms)是由CLR创建的单线程(主线程,且只创建一个线程)来启动。在该线程上可以创建其他线程。 图: 线程工作方式 多线程由内部线程调度程序管理,线程调度器通常是...
这一节开始为大家介绍一下CLR线程池的I/O线程I/O线程是.NET专为访问外部资源所设置的一种线程,因为访问外部资源常常要受到外界因素的影响,为了防止让主线程受影响而长期处于阻塞状态,.NET为多个I/O操作都建立起了...
- 用于在 Windows 窗体环境中与主线程同步的助手类。 例如,如果您想从不同的线程向 ListBox 添加项目。 - 从一般文本或文件名中删除变音符号的类 对于下载使用应用程序“Mercurial”http://mercurial.selenic.com/...
自己写的多线程进度条,避免主线程窗体假死的功能程序,有详细注释,可直接运行看结果,写给不懂线程知识的人使用的,不用有线程等编程基础,只需添加窗体进自己的程序,然后按照代码注释在对应地方添加自己的函数就...
为了避免阻塞主线程,把执行过程放在一个新的Thread中,防止了DOS执行中,C#窗口“假死”现象。 网上有个管道实现DOS输出的程序,没看懂,也不能编译,却被各网站,很多人转载。 CSDN上有个程序,可以捕获dos输出,...
WinForm下多线程配合Invoke函数ping百度和主线程ping百度对比。很容易就可以看出俩者的区别。
异步编程一直是比较复杂的问题,其中要处理多线程之间的数据同步、获取进度、可取消、获取结果、不影响主线程操作、多个任务之间互相不影响等,因此需要设计编程模型去处理此类问题。 从.NET 4.5开始,支持的三种...
通过.NET C#实现对百度图片爬取的爬虫,用户只需要输入关键信息(如图片名字,...利用多线程download图片,支线程利用委托调用主线程控件 --4.通过流将图片文件下载到本地 注:程序仅供学习参考,禁止用于其他用途
//将线程作为后台线程处理,用途,当主线程关闭,子线程随着关闭 thGprs.Start( ); <br> try { IPHostEntry IPHost = Dns.Resolve(RemoteIp); string []aliases = IPHost.Aliases; ...
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...
主动回收和被动回收(当然,这是我自己的理解,微软可不是这么说的),主动回收就是,你去监视那个线程,并且等待,当异步方法完成了,就把异步线程回收,焦点回归主线程,实际上就是上篇文章《C#异步初步》的那种...
该库中的方法是线程感知的,将被推送到Unity主线程的同步上下文中以执行。 取消请求也以安全的方式进行。 安装 导航到“播放器设置”,并确保将“脚本运行时版本”设置为.NET 4.6等效项。 将Assets / Plugins文件夹...