private void pbCode_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(GetImage)).Start();
} /// <summary>
/// 验证码
/// </summary>
private void GetImage()
{
if (this.InvokeRequired)
{
DelegatObject c = new DelegatObject(GetImage);
this.BeginInvoke(c);
}
else
{
this.loadCheckImage.Visible = true;
this.loadCheckImage.Start();
this.pbCode.Image = Data.BabyHelper.GetImage(HttpHelper.Cookie);
this.txtCode.Focus();
this.loadCheckImage.Stop();
this.loadCheckImage.Visible = false;
}
}loadCheckImage,pbCode,txtCode均是控件
{
new Thread(new ThreadStart(GetImage)).Start();
} /// <summary>
/// 验证码
/// </summary>
private void GetImage()
{
if (this.InvokeRequired)
{
DelegatObject c = new DelegatObject(GetImage);
this.BeginInvoke(c);
}
else
{
this.loadCheckImage.Visible = true;
this.loadCheckImage.Start();
this.pbCode.Image = Data.BabyHelper.GetImage(HttpHelper.Cookie);
this.txtCode.Focus();
this.loadCheckImage.Stop();
this.loadCheckImage.Visible = false;
}
}loadCheckImage,pbCode,txtCode均是控件
你这里的新线程干的就是这样的事:
告诉UI线程要它去取图片->等待UI线程执行完任务->结束.
和直接在UI线程里执行没区别当然会卡死.
Data.BabyHelper.GetImage(HttpHelper.Cookie);
在执行这个的时候开线程,象你那样新线程还是返回UI线程来做的
class Class1
{
private ImageGetThread imageThread;
private delegate void safetyDele(string url); public Class1()
{
} public void loadImages()
{
imageThread = new ImageGetThread();
imageThread.imageLoaded += new ImageGetThread.getImageDele(imageThread_imageLoaded);
} void imageThread_imageLoaded()
{
//在这里做界面的更新
}
} class ImageGetThread
{
public string imgUrl = ""; public delegate void getImageDele();
public event getImageDele imageLoaded; public ImageGetThread()
{
Thread thed = new Thread(new ParameterizedThreadStart(work));
thed.Start();
} public void work()
{
//在这里写你获取IMAGE的代码就行了
imgUrl = "你要做的事情";
//获取完毕,激发事件,通知UI部分更新
imageLoaded();
}
}