C#异步委托实例概述(四)

先不说其他的,先看看代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.Remoting.Messaging;

namespace AddingAndMultipliction
{
   
    public partial class Form1 : Form
    {
        #region public constructor
        public Form1()
        {
            InitializeComponent();
        }
        #endregion
       
       
        private delegate void BinaryCaculationHandle(int startIndex, int count, out long result);
        private BinaryCaculationHandle bcAdding;
        private BinaryCaculationHandle bcMinuing;
        private BinaryCaculationHandle bcMulting;
       
        #region private control's method
        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                bcAdding = new BinaryCaculationHandle(AddingResult);
                bcMinuing = new BinaryCaculationHandle(MinuingResult);
                bcMulting = new BinaryCaculationHandle(MultingResult);
                long addingResult = 0, minuingResult = 0, multingResult = 0;
                bcAdding.BeginInvoke(1,100, out addingResult, new AsyncCallback(AddingCallBackMethod), null);
                bcMinuing.BeginInvoke(1, 100, out minuingResult, new AsyncCallback(MinuingCallBackMethod), null);
                bcMulting.BeginInvoke(1, 100, out  multingResult, new AsyncCallback(MultingCallBackMethod), null);

                //Thread tAdding = new Thread;
                //Thread tMultipliction = new Thread(new ThreadStart(GetMultiResult));
                //tAdding.Start();
                //tMultipliction.Start();
            }
            catch (System.Exception ex)
            {
               
            }
        }
        #endregion

        #region private method

        private void AddingResult(int startIndex, int count, out long result)
        {
            int s = startIndex;
            for (int i = 0; i < count; i++)
            {
                s = s + i;
            }
            result = s;
        }
        private void AddingCallBackMethod(IAsyncResult iar)
        {
            AsyncResult ar = (AsyncResult)iar;
            bcAdding = (BinaryCaculationHandle)ar.AsyncDelegate;
            long result = 0;
            bcAdding.EndInvoke(out result, iar);
           
            MessageBox.Show("加法结果:" + result.ToString());
        }

        private void MultingResult(int startIndex, int count, out long result)
        {
            long s = startIndex;
            for (int i = 1; i < count; i++)
            {
                s = s * i;
            }
            result = s;
        }
       
        private void MultingCallBackMethod(IAsyncResult iar)
        {
            AsyncResult ar = (AsyncResult)iar;
            bcAdding = (BinaryCaculationHandle)ar.AsyncDelegate;
            long result = 0;
            bcAdding.EndInvoke(out result, iar);
            MessageBox.Show("乘法结果:" + result.ToString());
        }

        private void MinuingResult(int startIndex, int count, out long result)
        {
            long s = startIndex;
            for(int i = 0; i< count ; i++)
            {
                s = s - i;
            }
            result = s;
        }

        private void MinuingCallBackMethod(IAsyncResult iar)
        {
            AsyncResult ar = (AsyncResult)iar;
            bcAdding = (BinaryCaculationHandle)ar.AsyncDelegate;
            long result = 0;
            bcAdding.EndInvoke(out result, iar);
            Thread.Sleep(1000);
            MessageBox.Show("减法结果:" + result.ToString());
        }
        #endregion
    }
}

 

最后执行的结果是:加法先算出来,乘法其次,减法最后。

解释过两天,这两天没空!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值