您的位置:首页 > 其它

WinForm中异步执行任务实例-按回车异步执行各任务。

2015-09-02 17:03 316 查看
//声明委托 ,  用于在线程内操作线程外的控件

      private delegate void SetTextCallback(Label lbl,string text);

      

        private void txtValidateCode_KeyPress(object sender, KeyPressEventArgs e)

        {           

           if ((int)e.KeyChar == 13)

            {

                //if (endPosition)

               // {

                   // FrmBaidu frmMain = (this.ParentForm as FrmBaidu);

                   // frmMain.LoadUserControl();

                //}

                lblNote.Text = "";

                TextBox validateCode = sender as TextBox;

                if (validateCode.Text == "")

                {

                    e.Handled = false;

                    lblNote.Text = "请输入验证码!";

                }

                else

                {

                    StartSomeWorkFromUIThread();

                    SendKeys.SendWait("{Tab}");

                }

            }

        }

        private void StartSomeWorkFromUIThread()

        {

            // 我们要做的工作相对UI线程而言台慢了,用下面的方法异步进行处理

            MethodInvoker mi = new MethodInvoker(RunsOnWorkerThread);//这是入口方法

            mi.BeginInvoke(null, null); // 这样就不会阻塞

        }

      // 缓慢的工作在此方法内进行处理,使用线程池里的线程

        private void RunsOnWorkerThread()

        {

            try

            {

                //doing something......

            }

            catch (Exception ex)

            {

                SetText(lblNote,ex.Message);

            }

        }

       //在线程内操作线程外的控件

        private void SetText(Label lbl, string text)

        {

            // InvokeRequired required compares the thread ID of the

            // calling thread to the thread ID of the creating thread.

            // If these threads are different, it returns true.

            if (lbl.InvokeRequired)

            {

                SetTextCallback d = new SetTextCallback(SetText);

                this.Invoke(d, new object[] { lbl,text });

            }

            else

            {

                lbl.Text= text;

            }

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: