这似乎和安全与否并无关联.net 的多线程是并行的,各线程有自己的结束方法(自然结束),在主线程也可以结束它(.abort 和.join)
事实上真正给开发人员的这样的控制权是少之又少,老是培养了一堆衣来伸手的家伙。。
你的问题只能怪你没有领晤规格化编程,是流程控制和布置问题
事实上真正给开发人员的这样的控制权是少之又少,老是培养了一堆衣来伸手的家伙。。
你的问题只能怪你没有领晤规格化编程,是流程控制和布置问题
解决方案 »
- C#Socket通信——控制台
- MEF怎么删除部件,有一段代码始终运行不正确?
- vs2010新建winform项目时目标框架问题
- 遇到一个比较奇怪的问题,求助中
- ASPxGridView.v9.3 中使用FileUpload 未将对象引用到实例
- c#中emun和string间的转换问题
- asp.net中,static变量怎么是全局共享的啊?
- 数据库备份问题请教(C# SQLSERVER2000)
- 关于checkedListBox的问题,奇怪了
- 初學c#,請各位幫助推荐幾本入門的書,最好注名出版祉或作者,謝謝!
- 利用WebService上传文件,如何获取上传进度??
- ▓▓▓▓在DataGrid中如何根据行宽自动换行?(Winform)▓▓▓
说明:获取或设置一个值,该值指示某个线程是否为后台线程。
属性值:如果此线程是后台线程或即将成为后台线程,则为 true;否则为 false。一个线程或者是后台线程或者是前台线程。后台线程与前台线程类似,区别是后台线程不会防止进程终止。一旦属于某一进程的所有前台线程都终止,公共语言运行库就会通过对任何仍然处于活动状态的后台线程调用 Abort 来结束该进程。
but
我就是觉得奇怪,为什么vs.net的debug环境没有返回,因为我把form给关闭了,按道理来说应该clr会调用abort,但是我所看到的,它让我觉得并没有这么做。您是老前辈,做个朋友吧
[email protected]
我的Email:[email protected]
所有的程序都是直线型的,由于它的入口点不象vb/delphi 那样直接指定窗体,相反反而要鼓励人们要在自己的main 函数里自己createWindowEx 一个窗体,也就是说,窗体对C而言只是由main 派生的一个子程序而已,并不是象VB那样成为主要。这点我们在C#里也见到了,启动一个窗体实际上是main 函数里的application.run 为该form 建立一个无限消息循环,所以此窗体是否已经载出和主程序是否已经结束并无直接的关系,从理论上来说application.exit 也是一样,它只是结束当前的form 中的无限消息循环简单的说,在一个VS工程建立之后,由编译器将它转化为api(也就是所谓的EXE 现在的EXE事实上都是伪EXE),经常见的比如1,找到入口点main
2,由main 里的application.run(new form1()); 转化为CreateWindowEx 创建一个窗体,然后在创建后回调form_load 等事件,完成后updateWindow 再回调 form_resize 等事件可以看出,事实上form1 和main 可以理解为二个并行的线程,form1 只是main 的一个派生物,但是main 在application.run 之后被挂起(因为已经出让了消息循环),我们做个实验:static void Main()
{
Application.Run (new Form1());
MessageBox.Show("ok");
}运行后是在是 form1 载出(unload)后才出现ok 的MessageBox 的而不是application.run 之后马上出现ok 对话框而多线程并不是是这样,它们都是并行的,彼此都有它们自己的消息循环,所以某form(只是你自己理解成主程序,form 并不是主程序)中结时返回还必须要执行main 下面的命令,并不代表程序就结束了,这时VS也不敢直接帮你将全部子线程中结,必须自己处理其它的线程中止,就算自动帮你abort 也是微软考虑到某些粗心的人或者希望得到简单编程的人士
我不熟悉在.net,一个form给创建和delete的步骤,但是认为这个过程必须和vc的类似,因为这个消息机制是windows的体制所决定的,所以我虽然没有直接关闭最上层的函数,但是消息机制会这样做
以至我认为,.net是在消息的映射后,由内部clr对domain中的thread进行检测,来完成所有的资源回收和对子thread的abort对了我+你了哈