利用委托的BeginInvoke与EndInvoke操作线程

委托的BeginInvoke方法可以异步的执行该委托绑定的方法,endinvoke用来接收委托返回的参数,并且一直堵塞直到方法执行完成才会继续执行后续代码,示例如下

        public  void mine()
        {
            Func func = InitConfigTable;
            func.BeginInvoke(asyncResult =>
            {

                Func handler = (Func)((AsyncResult)asyncResult).AsyncState;
                string msg = handler.EndInvoke(asyncResult);
                Console.WriteLine(msg);
            }, func);
            Console.WriteLine("ok");
        }

        private string InitConfigTable()
        {
            Thread.Sleep(2000);
            string msg = "haha";
            return msg;
        }

begininvoke传入一个asyncCallback的委托和一个object,当方法执行完毕,则会自动执行asyncCallback绑定的方法如果InitConfigTable需要传入参数的话,那么begininvoke前面的参数要与InitConfigTable保持一致,比如

public  void mine()
        {
            string s="wow";
            Func func = InitConfigTable;
            func.BeginInvoke(s,asyncResult =>
            {

                Func handler = (Func)((AsyncResult)asyncResult).AsyncState;
                string msg = handler.EndInvoke(asyncResult);
                Console.WriteLine(msg);
            }, func);
            Console.WriteLine("ok");
        }

        private string InitConfigTable(string s)
        {
            Thread.Sleep(2000);
            string msg = s;
            return msg;
        }

begininvoke传入的另一个参数object可以为空也可以传入上面定义的func委托,如果为空,则begininvoke方法内部的AsyncState需要改为AsyncDelegate,否则会出错

你可能感兴趣的:(利用委托的BeginInvoke与EndInvoke操作线程)