Exemplo n.º 1
0
        /// <summary>
        /// 线程同步,“阻塞”调用,两个线程工作
        /// </summary>
        static void Demo04()
        {
            Console.WriteLine("******* 线程同步,“阻塞”调用,两个线程工作 *********");
            Console.WriteLine("Main() invokee on thread {0}.", Thread.CurrentThread.ManagedThreadId);
            //将委托实例指向Add()方法
            AddOp        pAddOp = new AddOp(Add);
            IAsyncResult iftAR  = pAddOp.BeginInvoke(10, 10, null, null);

            //判断委托线程是否执行完任务,
            //没有完成的话,主线程就做其他的事
            while (!iftAR.IsCompleted)
            {
                Console.WriteLine("Main()方法工作中.......线程ID是:{0}", Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(1000);
            }
            //获得返回值
            int answer = pAddOp.EndInvoke(iftAR);

            Console.WriteLine("10 + 10 = {0}.", answer);
            Console.ReadLine();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 线程异步 委托异步线程 两个线程“同时”工作
        /// </summary>
        static void Demo03()
        {
            Console.WriteLine("******* 委托异步线程 两个线程“同时”工作 *********");
            //显示主线程的唯一标示
            Console.WriteLine("调用Main()的主线程的线程ID是:{0}.", Thread.CurrentThread.ManagedThreadId);
            //将委托实例指向Add()方法
            AddOp pAddOp = new AddOp(Add);

            //开始委托次线程调用。委托BeginInvoke()方法返回的类型是IAsyncResult,
            //包含这委托指向方法结束返回的值,同时也是EndInvoke()方法参数
            IAsyncResult iftAR = pAddOp.BeginInvoke(10, 10, null, null);
            //int i = 0;
            //while (!iftAR.IsCompleted)
            //{
            //    Console.WriteLine("Main()方法中执行其他任务........线程ID是:{0},执行第{1}次", Thread.CurrentThread.ManagedThreadId, i.ToString());
            //    i++;
            //}

            int sum = pAddOp.EndInvoke(iftAR);

            Console.WriteLine("10 + 10 = {0}.", sum);
            Console.ReadLine();
        }