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