您的位置:首页 > 编程语言 > C#

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

2009-03-18 23:11 148 查看
先不说其他的,先看看代码。

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
}
}

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

解释过两天,这两天没空!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: