俱往矣

辛辛苦苦一辈子,就为那一个小蜗居.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近因为项目需要使用异步执行方法,特意查了一下这方面的资料,整理一下。

第一种方法使用的.net 2.0 所实现异步方法,可以做一些简单的异步处理,实现传入和传出参数.

第二种方法是使用自定义线程处理,适合处理复杂,可控的逻辑操作

下面是一个小小的示例,简单演示使用方法:

  1. 使用BeginInvoke 实现异步方法调用
        
     1 using System;
     2 using System.Windows.Forms;
     3 using System.Threading;
     4 
     5 
     6 // 使用BeginInvoke 实现异步方法调用 (带传入,传出参数)
     7 public class BeginInvokeTest
     8 {
     9     //返回数据委托方法
    10     private delegate int MyMethod(int e);
    11 
    12     public void mian()
    13     {
    14         MyMethod myMethod = method;
    15         //调用异步方法,传入委托方法参数,完成后执行方法,委托实例
    16         //返回异步执行接口
    17         IAsyncResult asyncResult = myMethod.BeginInvoke(1000, MethodCompleted, myMethod);
    18 
    19     }
    20 
    21     //数据返回执行方法
    22     private int method(int sleepTime)
    23     {
    24         //做一些操作
    25         Thread.Sleep(sleepTime);
    26 
    27         //返回需要返回的数据,返回0
    28         return 0;
    29     }
    30 
    31     /// <summary>
    32     /// 异步完成执行方法
    33     /// </summary>
    34     /// <param name="asyncResult"></param>
    35     private void MethodCompleted(IAsyncResult asyncResult)
    36     {
    37         if (asyncResult == null)
    38         {
    39             return;
    40         }
    41 
    42         //接受返回数据 0
    43         int result = (asyncResult.AsyncState as MyMethod).EndInvoke(asyncResult);
    44     }
    45 
    46 }

     

    自定义线程实现异步方法调用 (带传入,传出参数)
        
     1 using System;
     2 using System.Windows.Forms;
     3 using System.Threading;
     4 
     5 //使用多线程方法 实现异步方法调用 (带传入,传出参数)
     6 namespace Wim.Tool
     7 {
     8     //定义返回数据委托
     9     public delegate void ResultEventHandler(int i);
    10 
    11     /// <summary>
    12     /// 数据库 调用主体方法
    13     /// </summary>
    14     public class WimSqlClient
    15     {
    16         /// <summary>
    17         /// 获取异步返回值处理方法
    18         /// </summary>
    19         /// <param name="i"></param>
    20         private static void ResultEventMethod(int i)
    21         {
    22             // TODO: 异步存储数据库返回值处理方法
    23         }
    24 
    25         /// <summary>
    26         /// 异步调用 SQL处理方法
    27         /// </summary>
    28         /// <param name="optCode"></param>
    29         /// <param name="userInfo"></param>
    30         /// <param name="optParam"></param>
    31         public void CreateAsyncService(string optCode, string userInfo, string optParam)
    32         {
    33 
    34             //实例化WimThreadState类,为线程提供参数
    35             WimThreadState tws = new WimThreadState(optCode, userInfo, optParam, new ResultEventHandler(ResultEventMethod));
    36 
    37             // 创建执行任务的线程,并执行
    38             Thread t = new Thread(new ThreadStart(tws.GetResult));
    39             t.IsBackground = true;
    40             t.Start();
    41         }
    42     }
    43 
    44     /// <summary>
    45     /// 数据库处理类
    46     /// </summary>
    47     public class WimThreadState
    48     {
    49         private const string siteInfo = "WIM";
    50         private ResultEventHandler resultEventHandler;
    51 
    52         //要用到的属性,也就是我们要传递的参数
    53         private string optCode;
    54         private string userInfo;
    55         private string optParam;
    56 
    57         //包含参数的构造函数
    58         public WimThreadState(string optCode, string userInfo, string optParam, ResultEventHandler resultEventHandler)
    59         {
    60             this.optCode = optCode;
    61             this.userInfo = userInfo;
    62             this.optParam = optParam;
    63             this.resultEventHandler = resultEventHandler;
    64         }
    65 
    66         /// <summary>
    67         /// 请求数据库,返回受影响行数
    68         /// </summary>
    69         public void GetResult()
    70         {
    71             // TODO: 需要异步处理的方法
    72         }
    73     }
    74 }

     

posted on 2009-12-20 12:05  俱往矣  阅读(551)  评论(0编辑  收藏  举报