如何在C#中隐式停止对象中的线程

如何在C#中隐式停止对象中的线程,第1张

概述我有一个包含工作线程的对象.我想在对象超出范围时杀死线程. using System.IO;using System;using System.Threading;namespace tt { class Program { static void Main() { AnotherClass a = new Anoth 我有一个包含工作线程的对象.我想在对象超出范围时杀死线程.
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#中隐式停止对象中的线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252096.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存