先不说其他的,先看看代码。
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
}
}
最后执行的结果是:加法先算出来,乘法其次,减法最后。
解释过两天,这两天没空!