首页 新闻 搜索 专区 学院

C# 关于线程异步调用的基础问题...

0
悬赏园豆:5 [已解决问题] 解决于 2012-09-17 10:44

问题在代码里:

using System;
using System.Threading;
using System;
using System.Threading;

namespace ThreadPoolApplication
{
    class Program
    {
    
        static int count = 5;
        static void Main(string[] args)
        {
            Test t=new Test ();
            ReStringMths r=new ReStringMths (t.Exec);
            r.BeginInvoke(new System.AsyncCallback((IResult)=>{r.EndInvoke(IResult);Console.WriteLine("类名为{0}的异步方法{1}执行完毕!",IResult.AsyncState.ToString(),IResult.AsyncState.GetType().GetMethods()[0].Name);}),t);
            //问题1:请问r.EndInvoke(IResult);这个IResult传进去干嘛用的?用于什么情况下?
//问题2:有什么办法可以获取t.Exec的返回值?

//问题3:不写r.EndInvoke(IResult);同样可以得到正确结果...但是为什么要有r.EndInvoke方法呢?
            System.Console.ReadKey();
        }
    }

    delegate string ReStringMths();
        class Test
        {
            public string Exec()
            {
                System.Console.WriteLine("Start..."); Thread.Sleep(5000); System.Console.WriteLine("End..."); return "hello";
            }
            
        }
}

新手..问题多多..麻烦各位了!

hexllo的主页 hexllo | 菜鸟二级 | 园豆:405
提问于:2012-09-14 17:49
< >
分享
最佳答案
0

            Test t = new Test();
            ReStringMths r = new ReStringMths(t.Exec);
            IAsyncResult iar = r.BeginInvoke(new System.AsyncCallback((IResult) =>
            {
                string s2 = r.EndInvoke(IResult); ;
                Console.WriteLine("类名为{0}的异步方法{1}执行完毕!", IResult.AsyncState.ToString(), IResult.AsyncState.GetType().GetMethods()[0].Name);
            }), t);
            //问题1:请问r.EndInvoke(IResult);这个IResult传进去干嘛用的?用于什么情况下?
            //是为了标示EndInvoke方法反回的是哪一次调用委托反回值,因为一个委托可能会被调用多次
            //问题2:有什么办法可以获取t.Exec的返回值?
            string s1 = r.EndInvoke(iar);//s1就是反回值
            //问题3:不写r.EndInvoke(IResult);同样可以得到正确结果...但是为什么要有r.EndInvoke方法呢?
            //r.EndInvoke(IResult);方法是用来接收反回值用的,
            System.Console.ReadKey();

        }


        delegate string ReStringMths();
        class Test
        {
            public string Exec()
            {
                System.Console.WriteLine("Start..."); Thread.Sleep(5000); System.Console.WriteLine("End..."); return "hello";
            }

        }

收获园豆:5
只会造轮子 | 老鸟四级 |园豆:2274 | 2012-09-14 21:44
其他回答(1)
0

请学习下 IAsyncResult 接口。

Launcher | 园豆:45045 (高人七级) | 2012-09-14 17:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册