万事里总会有个一,普遍规律下总有那么一些例外的东西,比如说timer,比如说.NET游魂现象,其作用域就不会因函数的结束而结束。考察以下.NET游魂现象处理函数,
创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为徽县企业提供专业的成都网站建设、成都网站制作,徽县网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
- private void button1_Click(object sender, EventArgs e)
- {
- System.Timers.Timer t = new System.Timers.Timer();
- t.Interval = 1000 * 2;
- t.Elapsed += delegate
- {
- MessageBox.Show(System.DateTime.Now.ToString());
- };
- t.Start();
- }
按完button1按钮后,timer持续运行,每隔约2秒就会弹出一个msgbox显示当前时间,当然,因为我们已经失去了t这个变量,表面上也就无法终止这个timer了(也许有办法终止吧)。对于这种现象,我推测是两种原因造成的。一,timer是对windows内核对象的包装,上面这段托管代码的底层调用了来自windows的一些内核对象,在超离作用域的时候,没有对内核对象进行相应的处理,当然这只是推测,我现在没有精力去证实。其二:使用了多线程技术,考察以下代码,
- System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(delegate() {
- for (int i = 0; i < 6; i++)
- {
- System.Threading.Thread.Sleep(3000);
- MessageBox.Show("I'm in thread");
- }
- }));
- t.Start();
- MessageBox.Show("end of click");
以上两段代码,现象是类似的,为将其称之为.NET游魂现象——看上变量已经死了,实际上依然存在,原理尚有待研究。
网页名称:浅析.NET游魂现象
文章来源:http://www.mswzjz.cn/qtweb/news28/17978.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能