[英]C# Loading screen / Threading issue
在加载主表单之前,它会要求用户检查更新。 当他们单击“确定”时,我将显示主窗体,并制作一个包含一些标签和带有动画gif的图片框的面板。
动画的gif不会移动,这通常是因为主线程忙,但是我已经将线程穿线了,并且没有运气来播放动画。
这就是我所拥有的。
Thread CheckVersion = new Thread(new ThreadStart(VersionCheck));
this.Show(); //bring up the main form
this.BringToFront();
pCheckingVersions.Visible = true; //this contains the animated gif
Application.DoEvents(); //refresh ui so my box
CheckVersion.Start(); //start thread
CheckVersion.Join(); //wait for thread to exit before moving on
pDownloading.Visible = false;
问题在于Thread.Join()将阻塞调用线程,直到您等待的线程完成为止。
相反,您应该对这种活动使用异步模型。 BackgroundWorker在这里很理想:
class MyForm
{
private BackgroundWorker _backgroundWorker;
public Myform()
{
_backgroundWorker = new BackgroundWorker();
_backgroundWorker.DoWork += CheckVersion;
_backgroundWorker.RunWorkerCompleted += CheckVersionCompleted;
// Show animation
// Start the background work
_backgroundWorker.DoWork();
}
private void CheckVersion()
{
// do background work here
}
private CheckVersionCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// hide animation
// do stuff that should happen when the background work is done
}
}
这只是一个实现的粗略示例,但与我过去所做的很多相似。
CheckVersion.Join()调用使您的UI线程等待CheckVersion线程完成,从而阻塞了该线程。 这会使GIF动画暂停。
尝试使用BackgroundWorker类,并使用RunWorkerCompleted
事件向您的UI线程发送信号,表明已完成后台操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.