先说明情景:目标线程无论怎么生成,其代码是不能修改的。也就是说只修改调用方代码实现。如果用异步委托:支持线程结束时回调(BeginInvoke方法的的第一个参数),但不支持在外部中断线程
如果用手动线程:支持在外部中断线程(Thread.Abort方法),但不支持线程结束回调或事件
现在想同时实现这两个特性,要怎么处理呢?

解决方案 »

  1.   

    “在外部中断线程”?你以为只要执行Abort那么线程就被中断?太想当然了。Abort只是设置线程的一个状态值而已。这两个东西,从业务层发消息来中断它的机制都是一样的,跟Abort没有关系。
      

  2.   

    看你的问题就知道,你的所谓“目标线程”设计时根本不具有所谓的Abort能力,别想当然了。
      

  3.   

    关于2L的回复给出一段代码
    可以看到手工线程是可以在线程外部强行中止的。但是不能实现 线程结束后回调 或 线程自然结束的事件        static void Main(string[] args)
            {
                Thread t = new Thread(a);
                t.Start();
                Thread.Sleep(100);
                t.Abort();
                Console.Read();
            }        static void a()
            {
                int i = 0;
                try
                {
                    while (true)
                    {
                        i++;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(i+" loops before break. ");
                    Console.WriteLine(ex.ToString());
                }
            }