簡體   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