异步线程

 

 //定义与方法同签名的委托
        private delegate void AL_DelegateName(List<AL_ProductList> finishedList, string sourceDir, string saveDir, bool jinYi, bool maoLian, bool product, bool FTP, DateTime dtStart, DateTime dtEnd, string name);
   private void AL_CallBackMethod(IAsyncResult ar)
        {
            //从异步状态ar.AsyncState中,获取委托对象
            AL_DelegateName dn = (AL_DelegateName)ar.AsyncState;
            //输出参数
            int i;

            //一定要EndInvoke,否则你的下场很惨
            dn.EndInvoke(ar);
            XtraMessageBox.Show("OK");
            //try
            //{
            //    this.pictureBox1.Visible = false;
            //}
            //catch (Exception)
            //{

            //    this.pictureBox1.Visible = false;
            //}
            //  MessageBox.Show("异步完成喽!i的值是" i.ToString() ",r的值是" r);
        }

private void loadone()
{
 #region
                //实例化委托并初赋值

                AL_DelegateName dn = new AL_DelegateName(new Actor.AliActor().ConvertMethod);
                //输出参数
                int i;
                //实例化回调方法
                //把AsyncCallback看成Delegate你就懂了,实际上AsyncCallback是一种特殊的Delegate,就像Event似的
                AsyncCallback acb = new AsyncCallback(AL_CallBackMethod);
                //pictureBox1.Visible = true;
                //异步开始
                //如果参数acb换成null则表示没有回调方法
                //最后一个参数dn的地方,可以换成任意对象,该对象可以被回调方法从参数中获取出来,写成null也可以。参数dn相当于该线程的ID,如果有多个异步线程,可以都是null,但是绝对不能一样,不能是同一个object,否则异常
                IAsyncResult iar = dn.BeginInvoke(finishedList, this.txtSourceDir.Text, this.txtSaveDir.Text, cktJinYi.Checked, cktProduct.Checked, cktMaoLian.Checked, ckFTP.Checked,
        dtStart, dtEnd, cbbSite.Text, acb, dn);
                //去做别的事

                #endregion   
}

 

posted on 2013-05-07 16:07  水行者  阅读(194)  评论(0编辑  收藏  举报

导航