2012-03-09 105 views
0

在我的splash代碼中出現錯誤。 這是一個單獨的形式,以經常。Splash Form Error,多種形式

public Form1() 
    { 

     InitializeComponent(); 
     Thread t1 = new Thread(new ThreadStart(SplashForm)); 
     t1.Start(); 
     Thread.Sleep(5000); // The amount of time we want our splash form visible 
     t1.Abort(); 
     Thread.Sleep(1000); 
    } 

基本上說(新的ThreadStart(SplashForm))的部分;

我得到 「SplashForm」 錯誤。

防濺形式是形式的名稱。它表示它是一種類型,但被用作變量。

任何想法?

+0

'ThreadStart'構造函數有一個方法的名稱,而不是一個類型(您的形式是一種類型)。 – vulkanino 2012-03-09 09:25:16

+0

這不是實現啓動畫面的好方法,因爲您仍然會在主窗體懸掛在背景中並且一旦啓動畫面完成後延遲加載。 Google C#啓動畫面,超過80,000項結果。 [C#閃屏問題]的 – Lloyd 2012-03-09 09:25:48

+0

可能重複(http://stackoverflow.com/questions/392864/c-sharp-splash-screen-problem) – 2012-03-09 10:33:45

回答

0

你必須對線程,而不是一個類型(SplashForm)的構造函數的方法名稱。 你可以做這樣的事情:

public Form1() 
{ 
    InitializeComponent(); 
    new SplashForm().ShowDialog(); 
} 

,並在SplashForm類:如果你從另一個線程調用異常

class SplashForm : Form 
{ 
    public SplashForm() 
    { 
     InitializeComponent(); 
     new Thread(run).Start(); 
    } 

    private void run() 
    { 
     Thread.Sleep(5000); 
     this.Invoke((MethodInvoker)delegate 
     { 
      this.Close(); 
     }); 
    } 
} 

,你應該嘗試與MethodInvoker的伎倆。

+0

精彩,1UP但一個問題..我得到一個異常: 未處理System.Windows.Forms.dll中發生類型'System.InvalidOperationException'的異常 附加信息:跨線程操作無效:控制的「SplashForm」可以從創建線程以外的線程訪問。 – 2012-03-09 09:46:28

+0

Googeling該錯誤消息會帶來多個結果,這些結果描述的事實是,您無法從未創建該元素的線程更改用戶界面元素,並且應該使用'Control.Invoke'來執行此操作。 – 2012-03-09 09:54:08

+0

我不知道如何去做,因爲它不是一個你點擊的元素..即時通訊如此困惑:/ – 2012-03-09 10:16:12

0

如果你的.NET版本> = 3.5,你可以使用SplashScreen類:

SplashScreen ss = new SplashScreen ("resource name"); 
ss.Show(true); // autoclose 

無需編寫任何代碼來顯示啓動畫面。

在Visual Studio 2008 SP1開始,您可以快速配置使用默認設置啓動畫面。

無論如何,你的代碼是錯誤的,因爲ThreadStart構造函數接受方法的名稱,而不是類型(你的表單是類型)。

+1

超過.Net 3.5的要求,'SplashScreen'要求應用程序是一個WPF應用程序。由於OP在談論「Forms」,我認爲他將無法使用它。 – ken2k 2012-03-09 09:35:40