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
}
}
最后执行的结果是:加法先算出来,乘法其次,减法最后。
解释过两天,这两天没空!
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
}
}
最后执行的结果是:加法先算出来,乘法其次,减法最后。
解释过两天,这两天没空!
相关文章推荐
- C#异步委托实例概述(二)
- jquery实战第一讲---概述及其入门实例
- [Lucene]-Lucene基本概述以及简单实例
- 23种设计模式C++实例之概述
- JavaScript创建类/对象的几种方式概述及实例
- 【Quartz】Quartz概述及入门实例
- 一起talk C栗子吧(第五十九回:C语言实例--字符串概述)
- JQuery实战第一讲:概述、环境准备及入门实例
- 一起talk C栗子吧(第八十七回:C语言实例--使用管道进行进程间通信概述)
- nio实例概述
- Hadoop中的压缩(1) 概述与实例
- Asp.Net中的数据源概述与配置及实例代码
- Android 4.1 Netd详细分析(一)概述与应用实例
- 一起talk C栗子吧(第八十三回:C语言实例--进程间通信概述)
- SSM搭建-Mybatis入门概述及第一个Mybatis实例实现增删改查(16)
- perl实例详解第四版笔记1基本内容概述
- Android mp3音乐播放器实例-----概述
- 一起talk C栗子吧(第一百零七回:C语言实例--线程概述)
- Android-Service(系统服务概述 和 桌面浮悬窗,进程管理 等 实例)
- 1 NFS概述及实例