繁体   English   中英

C#加载屏幕/线程问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM