刚接触C#,谁能提供一些异步编程的资料,网上的中文好象很难找,

cwbcom 2004-01-05 11:36:05
如题
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
goooogle 2004-01-05
  • 打赏
  • 举报
回复
up
leonXXX 2004-01-05
  • 打赏
  • 举报
回复
这是我前一段时间写的一个组件,看一看吧,或许有用
leonXXX 2004-01-05
  • 打赏
  • 举报
回复

/// <summary>
/// CBizBroadcast:处理异步请求返回消息的类,
/// 负责将异步请求的结果返回给请求者
/// </summary>
public class CBizBroadcast
{
/*================================================================
* 成员、构造函数
================================================================*/
#region
/// <summary>
/// 处理多线程异步回调时,处理消息方法的委托,
/// 由实现此委托方法的对象真正实现消息的处理
/// </summary>
private static DBizEventHandler _EventHandler;

private static string _ErrMsg; //存放出错信息的变量
/// <summary>
/// 构造函数
/// </summary>
static CBizBroadcast()
{}
#endregion
/*================================================================
* 方法
*================================================================*/
#region
/// <summary>
/// 将对象加入消息队列
/// </summary>
/// <param name="bizEventHandler"></param>
public static void AddBoard (DBizEventHandler bizEventHandler)
{
try
{
_EventHandler -= bizEventHandler;//
_EventHandler += bizEventHandler;
}
catch(System.Exception er)
{
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
_ErrMsg=er.Message.ToString();
throw er;
}
}
/// <summary>
/// 从消息队列中移除对象
/// </summary>
/// <param name="Sender"></param>
/// <param name="e"></param>
public static void RemoveBoard(DBizEventHandler bizEventHandler)
{
try
{
_EventHandler -= bizEventHandler;
}
catch(System.Exception er)
{
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
_ErrMsg=er.Message.ToString();
throw er;
}
}
/// <summary>
/// 发送消息的静态方法(消息名称,消息号,需处理的返回文档)
/// 消息的名称和号与业务场景的名称和号对应
/// </summary>
/// <param name="MsgName"></param>
/// <param name="MsgID"></param>
/// <param name="ReturnData"></param>
public static void Send(string msgID, XmlNode xmlData)
{
try
{
if(_EventHandler!=null)
_EventHandler(msgID,xmlData);
}
catch(System.Exception er)
{
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
_ErrMsg=er.Message.ToString();
throw er;
}
}
#endregion
}
}
leonXXX 2004-01-05
  • 打赏
  • 举报
回复

#region 注释
/**************************************************************************************
* 文件名: BizService.cs
* 创建人: leon
* 创建日期: 2003年11月5日
* 修改人:
* 最后修改日期: 2003年11月6日
* 描述: CBizService类: 业务访问代理类,在业务请求和业务处理组件
* 之间提供代理,提供了同步和异步两种访问
* 业务处理组件的方式
*
* CBizBroadcast类: 回调消息广播类,CBizService异步访问业务处
* 理组件后,它负责将响应的回调消息返回
* 给请求者
*
* InvokeDelegate委托: 异步访问委托,为CBizService类异步调用业务
* 处理组件时使用
*
* DBizEventHandler委托: 消息广播委托,为业务请求者和广播类使用,
* 以实现消息的响应与接收
*
*
* 版本: 1.0.0.0
**------------------------------------------------------------------------------
** Copyright (c) 2003-? ****************************************************************************************/
#endregion
using System;
using System.Xml;
using FERP.Biz;

namespace FERP.Biz
{
/*****************************************************************
* 为异步调用业务分发组件而使用的委托
* 在.Net提供的用于异步调用的三种方式中,我们选择使用回调函数传递
* 异步消息的方式
*****************************************************************/
public delegate XmlNode InvokeDelegate(XmlNode inXml);
/**********************************************
* 表示业务广播的委托
**********************************************/
public delegate void DBizEventHandler(string msgID,XmlNode xmlData);

/// <summary>
/// 业务访问代理类,在业务请求和业务处理组件之间提供代理
/// </summary>
public class CBizService
{
/*=================================================================
类的成员
=================================================================*/
#region
private string _DataStoreID; //存放业务帐套编号的私有变量
private Int32 _BizID; //存放业务场景编号的私有变量
private string _AccountID; //存放用户帐号的私有变量
private string _Token; //存放用户令牌的私有变量
private string _ErrMsg; //记录组件内错误消息内容的变量
private InvokeDelegate _invokedelegate; //处理异步回调的委托变量
public XmlNode _node; //异步返回的处理文档 for test only
public Int32 BizID{get{return _BizID;}} //允许访问的业务场景编号
public string ErrMsg{get{return _ErrMsg;}}//提取错误信息的属性
#endregion

/*=================================================================
构造函数,提供三个重载的构造
=================================================================*/
#region
/// <summary>
/// 构造函数
/// </summary>
/// <param name="dataStoreID">帐套编号</param>
/// <param name="bizID">业务场景编号</param>
/// <param name="accountID">用户帐号</param>
/// <param name="token">用户令牌</param>
public CBizService(string dataStoreID,Int32 bizID,string accountID,string token)
{
try
{
_DataStoreID=dataStoreID;
_BizID=bizID;
_AccountID=accountID;
_Token=token;
}
catch(System.Exception er)
{
_ErrMsg=er.Message.ToString();
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
throw er;
}
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="bizID">业务场景编号</param>
/// <param name="accountID">用户帐号</param>
/// <param name="token">用户令牌</param>
public CBizService(Int32 bizID,string accountID,string token)
{
try
{
_BizID=bizID;
_AccountID=accountID;
_Token=token;
}
catch(System.Exception er)
{
_ErrMsg=er.Message.ToString();
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
throw er;
}
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="bizID">业务场景编号</param>
public CBizService(Int32 bizID)
{
try
{
_BizID=bizID;
}
catch(System.Exception er)
{
_ErrMsg=er.Message.ToString();
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
throw er;
}
}
#endregion
/*================================================================
= 为异步调用业务分发组件而使用的委托
= 在.Net提供的用于异步调用的三种方式中,我们选择使用回调函数传递
= 异步消息的方式
==================================================================*/
// public delegate XmlNode InvokeDelegate(XmlNode inXml);
/*================================================================
* 类的方法
==================================================================*/
#region 私有

/// <summary>
/// 发送返回的异步调用结果
/// </summary>
/// <param name="result"></param>
private void Callback(IAsyncResult result)
{
try
{
//异步是否已经执行完毕
if (result.IsCompleted)
{
//停掉异步请求
XmlNode nd=_invokedelegate.EndInvoke(result);
//使用广播消息的类广播消息
CBizBroadcast.Send(_BizID.ToString().Trim(),nd);
}
}
catch(System.Exception er)
{_ErrMsg=er.Message.ToString();
/*!!!!!!!!!!!!!!!!!!!!!!!!!!
* 下面的代码建议暂时保留,若确定构建错误文档的工作由
* 业务分发组件完成后,再进行删除
*!!!!!!!!!!!!!!!!!!!!!!!!!!*/
// try
// {
// _ErrMsg=er.Message.ToString();
// System.Diagnostics.Debug.WriteLine(er.Message.ToString());
// //发送出错信息报告
// XmlDocument doc=new XmlDocument();
//// string Err=er.Message.ToString();
// XmlNode NodeErr=doc.CreateElement("Error");
// XmlAttribute arErrMsg=doc.CreateAttribute("ErrorMessage");
// XmlAttribute arErrSource=doc.CreateAttribute("ErrorSource");
// arErrMsg.Value=er.Message.ToString();
// arErrSource.Value="在执行业务逻辑时发生";
// NodeErr.Attributes.Append(arErrMsg);
// NodeErr.Attributes.Append(arErrSource);
//
//
// CBizBroadcast.Send(_BizID.ToString().Trim(),NodeErr);
// }
// catch(System.Exception err)
// {
// System.Diagnostics.Debug.WriteLine(err.Message.ToString());
// }
}
}
/// <summary>
/// 析构函数,清理所有正在使用的资源。
/// </summary>
~CBizService()
{
_invokedelegate=null;
}
#endregion //私有
#region 公有
/// <summary>
/// 同步调用业务分发组件的方法
/// </summary>
/// <param name="inXml">从客户端发来请求业务文档</param>
/// <returns>执行业务逻辑后返回给客户端的业务文档</returns>
public XmlNode SyncInvoke(XmlNode inXml)
{
try
{
return new CBizDispense(_BizID).Execute(inXml);
}
catch(System.Exception er)
{
_ErrMsg=er.Message.ToString();
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
throw er;
}
}
/// <summary>
/// 异步调用业务分发组件的方法
/// </summary>
/// <param name="inXml">从客户端发来请求业务文档</param>
public void AsyncInvoke(XmlNode inXml)
{
try
{
//远程组件实例(此处没有考虑带帐套的情况!)
CBizDispense dispense=new CBizDispense(_BizID);
//将要异步调用的远程组件的方法绑在委托上
_invokedelegate=new InvokeDelegate(dispense.Execute);
//定义消息返回的处理方法
AsyncCallback callback= new AsyncCallback(this.Callback);
object obj=new Object();
//发送异步请求
_invokedelegate.BeginInvoke(inXml,callback,obj);
}
catch(System.Exception er)
{
_ErrMsg=er.Message.ToString();
System.Diagnostics.Debug.WriteLine(er.Message.ToString());
throw er;
}
}
#endregion //公有
}
dahuzizyd 2004-01-05
  • 打赏
  • 举报
回复
http://www.yesky.com/SoftChannel/72342380468109312/20020611/1615308.shtml
希望用的上

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧