using System;
using System.Reflection;
using System.Collections.Generic;
namespace ConsoleApplication1
{
    class Class1
    {
        public static List<string> list = new List<string>();
        public delegate void AsyncEventHandler();
        static void test()
        {
            Console.WriteLine("1111111111");
        }
        [STAThread]
        static void Main(string[] args)
        {
            AsyncEventHandler asy = new AsyncEventHandler(test);
            IAsyncResult ia = asy.BeginInvoke(null, null);            asy.EndInvoke(ia);            Console.ReadLine();
        }
    }
}上面是一段简单的异步代码!!
其实我想实现的功能是每次调用BeginInvoke都会自动执行list.Add,
而不是把list.Add写在BeginInvoke下面
,由于里面有委托等等,不知从哪里下手,
所以来问前辈们,谢谢

解决方案 »

  1.   

    “不是把list.Add写在BeginInvoke下面”
    不写在下面 那就写在前面再写一个委托 实现自动执行list.Add, 
    将这个函数委托写在调用BeginInvoke的前面
      

  2.   

    1楼的写法不还是每次调用BeginInvoke都写多一次关于list.Add
      

  3.   

    把list.Add写在test函数内不就好了?如果你启用多线程同时运行,为防止冲突,可以启用回调来执行list.Add,或者使用Lock来锁住对象。
      

  4.   

    using System;
    using System.Reflection;
    using System.Collections.Generic;
    namespace ConsoleApplication1
    {
        class Class1
        {
            public static List<string> list = new List<string>();
            public delegate void AsyncEventHandler();
            static void test()
            {
                Console.WriteLine("1111111111");
            }
            [STAThread]
            static void Main(string[] args)
            {
                AsyncEventHandler asy = new AsyncEventHandler(test);
                IAsyncResult ia = asy.BeginInvoke((o)=>{            asy.EndInvoke(o)},null);//这是最简单的 直接把 EndInvoke(o);写到结束时调用的方法中就可以了..不过呢,这种情况一般都是 有返回值时才有必要用到否则可以省略.            Console.ReadLine();
            }
        }
    }
      

  5.   

    若不象我上机那样写,你的原码中 通常是不会正确执行 EndInvoker(o); 的..