异步多线程(Thread)

Thread

1.利用Thread开启异步线程:

ThreadStart threadStart = new ThreadStart(() => this.DoSomethingLong("btnThreads_Click"));
Thread thread = new Thread(threadStart);
thread.Start();

2.设置前台前程与后台线程:

thread.IsBackground = true;

默认是前台线程,也就是当UI线程退出后,整个进程并不会结束,知道所有的的计算线程执行完,才退出,反之,后台进程是当UI线程退出后,进程立即退出,不会再进行计算

3.线程等待:

thread.Join();

把当前线程join到主线程,主线程等待当前线程执行完

4.基于Thread封装支持回调:

  private void ThreadWithCallback(ThreadStart threadStart, Action callback)
        {
            ThreadStart threadNew = new ThreadStart(
                ()=>
                {
                    threadStart.Invoke();
                    callback();
                });
            Thread thread = new Thread(threadNew);
            thread.Start();
        }

测试回调:

  ThreadStart threadStart = new ThreadStart(() => {
                this.DoSomethingLong("btnThreads_Click");

               });
               this.ThreadWithCallback(threadStart, () => { Console.WriteLine($"这里是回调{Thread.CurrentThread.ManagedThreadId.ToString("00")}"); });

5.基于Thread封装带返回值:

  private Func<T> ThreadWithReturn<T>(Func<T> funcT)
        {
            T t = default(T);
            ThreadStart startNew = new ThreadStart(
                () =>
                {
                    t = funcT.Invoke();
                });
            Thread thread = new Thread(startNew);
            thread.Start();

            return new Func<T>(() =>
            {
                thread.Join();
                return t;
            });
        }

测试返回值:

  Func<int> func = this.ThreadWithReturn(()=>
                {
                    Thread.Sleep(2000);
                    Console.WriteLine($"这里是ThreadStart {Thread.CurrentThread.ManagedThreadId.ToString("00")}");
                    return 12345;
                });
                int iResult = func.Invoke();
                Console.WriteLine(iResult.ToString());
            }
            Console.WriteLine($"****************btnThreads_Click END {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值