现在的位置: 首页 > 综合 > 正文

来了解一下winform多线程异步操作是怎么回事情

2012年09月11日 ⁄ 综合 ⁄ 共 2833字 ⁄ 字号 评论关闭

关键是:

委托定义,委托对象,委托内容
实际上,这个过程是有一种职业人叫做XX代理人,他就是一个XX代理人,我让他代理的具体过程是什么。

我通过一个地产项目的案例来了解winform多线程异步操作是怎么回事情。

有一个地产项目。需要建筑工程师干活,项目督导进行跟踪,还需要国家建筑监管人员做质量鉴定。

建筑师和项目督导的职位可以公司内部定义,但是做质量鉴定的必须是国家人员。

这个项目需要一个建筑队工程师,这个地产公司规定内部职业编号(UpdateControl),这个职位请的人叫CarlUpdateControlLeader,这个职位的这个人在项目还没具体开始就有了

全局的UpdateControl CarlUpdateControlLeader;

        //地产公司的建筑队职位。
        public delegate void UpdateControl(object objarr, object obj2);

        //这个职位聘请的人。
        UpdateControl CarlUpdateControlLeader;

        //这个人做的具体工作。  
        private void UpdateControl_Method(object objarr, object obj2)
        {
            //if (objarr.Length < 2) { return; }

            Label lbl = (Label)(objarr);
            lbl.Text = obj2.ToString();
        }

需要一个内部的协调跟踪人员,实际上他控制整个项目的进度(耗时),这个职位是地产公司内部规定的,职业编号dl_DoAsync,

        //地产公司督导职位的定义
        delegate string dl_DoAsync(int a, int b);

还需要一个项目的验收人员,这个人必须是国家人员AsyncCallback ,规定死了。

项目开始老板要做的就是分配活儿,告诉大家该干嘛。

private void BossCommand()
{
            try
            {
                //建筑工程师CarlUpdateControlLeader,你去做UpdateControl_Method这个事情
                //更新UI的委托
                CarlUpdateControlLeader = new UpdateControl(UpdateControl_Method);
               
                //项目督导dl_doThings,我新任命你是让你做DoAsync这个事情。dl_doThings应该知道他需要去和CarlUpdateControlLeader沟通,但是老板没有说,因为这是common sense.
                //需要做异步操作的任务代码执行体
                dl_DoAsync dl_doThings = new dl_DoAsync(DoAsync);
                 
                //我请了个国家机关的AsyncCallback,他叫callbak,他会做收尾工作,具体是MyCallBackMethod。
                //异步完成后的回调函数
                AsyncCallback callbak = new AsyncCallback(MyCallBackMethod);
               
                //项目督导dl_doThings,注意项目结束后需要跟那个callbak沟通,你自己去。
                //好了,你开始干活吧。
                //OK ,让我们开始异步吧
                dl_doThings.BeginInvoke(0, 0, callbak, dl_doThings);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
}

项目督导dl_doThings开始工作了。他的工作内容是
        //项目督导dl_doThings的具体工作内容。
        private string DoAsync(int a, int b)
        {
            for (int i = 0; i < 100; i++)
            {
                a++;
                b++;
                //dl_doThings要把 label2装修一下,让CarlUpdateControlLeader去做,装修成b的样子。
                label2.BeginInvoke(CarlUpdateControlLeader, new object[] { label2, b });
                //装修一次让他休息一下。
                Thread.Sleep(1);
            }
            //项目完了,有了个结果
            return a.ToString() + " -- " + b.ToString();
        }

//项目结束了,该那个国家人员callbak干活了。项目督导dl_doThings不能随便去找他,需要包装成国家认证人员的样子嘛IAsyncResult。

        private void MyCallBackMethod(IAsyncResult ar)
        {
            //callbak说你怎么可以跟我一样是国家人员呢,来,脱掉小马甲
            dl_DoAsync dl_do = (dl_DoAsync)ar.AsyncState;
            //乖,告诉我你什么结果。
            string vlu = dl_do.EndInvoke(ar);
          //恩,看看基本数据达到要求了没。
          if(vlu.IndexOf("100")>-1)
{
            //好吧,过关了。
            MessageBox.Show("OK, CallBackMedthod Do This");
}
        }

 

额。。。我还是厚道一点,把人家的代码传上来吧,真的不记得是从哪里找来的了。反正不是我写的。

/Files/kiddo/FarsTest.rar

抱歉!评论已关闭.