
using System.IO;using System;using System.Threading;namespace tt { class Program { static voID Main() { AnotherClass a = new AnotherClass(); a.Say(); } } class AnotherClass:Idisposable { private bool m_disposed; private Readonly autoresetEvent m_resetEvent = new autoresetEvent(false); public AnotherClass() { Thread t = new Thread(wait); t.Start(); } public voID dispose() { dispose(true); } private voID dispose(bool disposing) { if (m_disposed) { return; } if (disposing) { Console.Writeline("inner disposing"); } m_resetEvent.Set(); Console.Writeline("Outer disposing"); m_disposed = true; } private voID wait() { m_resetEvent.WaitOne(); } ~AnotherClass() { dispose(false); } public voID Say() { Console.Writeline("HellO"); } }} 该程序将挂在那里,因为没有调用AnotherClass的析构函数.我知道我可以调用a.dispose()来杀死线程.但有没有办法在对象超出范围时隐式杀死线程?
解决方法 不,那是不可能的.没有引用计数可以注意到该对象没有更多引用,因此在发生这种情况时无法执行任何 *** 作.Idisposable接口用于在不再使用实例时需要执行某些 *** 作的类,并且调用dispose方法是您发信号通知实例的方式.
在离开作用域时确保放置对象的常用方法是将代码包装在using块中:
static voID Main(){ using (AnotherClass a = new AnotherClass()) { a.Say(); }} 使用块是语法糖尝试…最后块:
static voID Main(){ AnotherClass a = new AnotherClass(); try { a.Say(); } finally { if (a != null) { ((Idisposable)a).dispose(); } }} 总结 以上是内存溢出为你收集整理的如何在C#中隐式停止对象中的线程全部内容,希望文章能够帮你解决如何在C#中隐式停止对象中的线程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)