//声明委托 , 用于在线程内操作线程外的控件
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;
}
}