BeginInvoke的中止

首先,这里的 BeginInvoke仅仅指的是Delegate的BeginInvoke,而非Control的BeginInvoke。 Control的BeginInvoke是在本线程执行,即创建control的线程,Delegate的BeginInvoke会从ThreadPool中选择并开辟一个异步线程来执行任务。

 BeginInvoke出的线程都是后台线程,可以理解界为IsBackground=true,当前台线程停止时会自动停止,而不论它本身是否已执行完成.
    delegate void asynEventHandler();

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Is ThreadPool {0}",Thread.CurrentThread.IsThreadPoolThread);
            Console.WriteLine("Is IsBackground:{0}", Thread.CurrentThread.IsBackground);
            Console.WriteLine("ID:{0}", Thread.CurrentThread.ManagedThreadId);
            Console.ReadLine();
            asynEventHandler handler = new asynEventHandler(Work.DoWork);
            handler.BeginInvoke(null,null);

            //如果想等待异步线程执行完成,
            //可以使用EndInvoke来获取执行结果
            handler.EndInvoke(null);
        }
    }


    class Work
    {
        public static void DoWork()
        {
            try
            {
                StreamWriter sw = new StreamWriter("log", true);
                sw.WriteLine(string.Format("Is ThreadPool {0}", Thread.CurrentThread.IsThreadPoolThread));
                sw.WriteLine(string.Format("Is IsBackground:{0}", Thread.CurrentThread.IsBackground));
                sw.WriteLine(string.Format("ID:{0}", Thread.CurrentThread.ManagedThreadId));
                sw.WriteLine(string.Format("Thread name:{0}", Thread.CurrentThread.Name));
                sw.WriteLine("aaaa");
                sw.Close();
                Thread.CurrentThread.Abort();
            }
            catch(Exception ex)
            {
                string msg = ex.Message;
            }
           
        }
    }


当想显示控制异步线程时,可以在被调函数中使用Thread.CurrentThread获取该线程。或者粗暴的使用ThreadPool。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值