2011-10-12 47 views
0

在我的主窗體加載之前,它要求用戶檢查更新。當他們點擊確定時,我會將主窗體顯示並製作一個包含一些標籤和一個帶有GIF動畫的圖片框的面板。C#加載屏幕/線程問題

動畫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; 

回答

2

的CheckVersion.Join()調用使您的UI線程等待的線程CheckVersion完成,哪些塊。這使得GIF動畫暫停。

嘗試使用BackgroundWorker類,並使用RunWorkerCompleted事件向您的UI線程發信號通知後臺操作已完成。

+1

感謝您的幫助:) – Tsukasa

3

問題是,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 
    } 
} 

這只是一個粗略的實現示例,但與我過去所做的很多類似。