C#的委托与多线程测试

C#的委托机制可以将一个新线程中的函数发送到窗体建立的线程中运行,使用委托之后,调用的函数会在窗体所在线程中当前执行的函数结束后执行。测试如下

为了计时,先建立一个计时类TicToc,代码如下

using System;

namespace Utility
{
    public static class TicToc
    {
        static private long timeStart;
        public static void Tic()
        {
            timeStart = DateTime.Now.ToUniversalTime().Ticks;
        }

        // toc 调用一次1ms
        public static double Toc(string text)
        {
            double timeSpan = (double)((DateTime.Now.ToUniversalTime().Ticks - timeStart)) / 10000;
            if (text != "")
                Console.WriteLine(text + "---" + "time elapsed: " + timeSpan.ToString() + " ms");
            else
                Console.WriteLine("time elapsed: " + timeSpan.ToString() + " ms");
            return timeSpan;
        }

        public static double Toc()
        {
            return Toc("");
        }
    }
}

 在主窗口中加入测试代码

        delegate void AAA();

        private void Aaa()
        {
            Invoke(new AAA(Bbb));
            //Bbb();
            Thread.Sleep(1000);
            TicToc.Toc("ddd");
        }

        private void Bbb()
        {
            Thread.Sleep(5000);
            TicToc.Toc("bbb");
        }

在任意一个控件的事件响应代码中加入下段

            new Thread(Aaa).Start();
            TicToc.Tic();
            TicToc.Toc("aaa");
            Thread.Sleep(2000);
            TicToc.Toc("ccc");

在Aaa()中通过委托调用Bbb的话,则打印出ccc时过去7000ms,在Aaa中直接调用Bbb的话,则打印出ccc时过去5000ms。

而不论使用委托与否,Aaa中的后续执行都要等Bbb执行完才进行,两种情况下ddd分别是在8000ms和6000ms时打印出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值