线程类

    public class UIAsyncJober
    {
        public delegate void JoberRunMethodDelegate(UIAsyncJober job);

        private static Dictionary<string, UIAsyncJober> jobs = new Dictionary<string, UIAsyncJober>();

        private ThreadStart beforeMethod = null;
        private ThreadStart runMethod = null;
        private ThreadStart doneMethod = null;
        private ThreadStart inProcessMethod = null;

        private SynchronizationContext context;

        private UIAsyncJober()
        {
            context = SynchronizationContext.Current;
        }

        public static UIAsyncJober GetJob()
        {
            return GetJob(Guid.NewGuid().ToString());
        }

        public static UIAsyncJober GetJob(string id)
        {
            if (jobs.ContainsKey(id))
            {
                return jobs[id];
            }

            var newjob = new UIAsyncJober();

            jobs.Add(id, newjob);

            return newjob;
        }

        public UIAsyncJober BeforeStart(ThreadStart method)
        {
            this.beforeMethod = method;
            return this;
        }

        public UIAsyncJober Run(ThreadStart method)
        {
            this.runMethod = method;
            return this;
        }

        public UIAsyncJober Done(ThreadStart method) // 还用ThreadStart委托,只是不想再定义一个委托了
        {
            this.doneMethod = method;
            return this;
        }

        public UIAsyncJober InProcess(ThreadStart method)
        {
            this.inProcessMethod = method;
            return this;
        }

        public void ReportProcess()
        {
            context.Send(new SendOrPostCallback(
                s =>
                {
                    inProcessMethod();
                }
            ), null);
        }

        Thread current = null;
        public void Start()
        {
            // stop already running thread
            if (current != null)
            {
                try
                {
                    current.Abort();
                }
                catch (Exception)
                {
                    // do nothing
                }
            }

            if (beforeMethod != null)
            {
                beforeMethod();
            }

            current = new Thread(new ThreadStart(innerRun));
            current.Start();
        }

        public void Abort()
        {
            if (current != null)
            {
                try
                {
                    current.Abort();
                }
                catch (Exception ex)
                {

                }
            }
        }

        private void innerRun()
        {
            runMethod();
            context.Send(new SendOrPostCallback(
                s =>
                {
                    if (doneMethod != null)
                    {
                        doneMethod();
                    }
                }
            ), null);
        }
    }

            UIAsyncJober jober = UIAsyncJober.GetJob("");
            jober.Run(delegate()
            {
              
            }).Done(delegate()
            {
                
            }).InProcess(() =>
            {
                //显示进度
            }).Start();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值