2011-07-01 78 views
0

我正在製作一個使用C#的程序,它幾乎已經結束了,我在想,包含一個歡迎表單加載5秒顯示程序名稱和其他內容將會很有趣。 ..這樣在Microsoft Word中......歡迎在c上加載#

enter image description here

,但我不知道如何做到這一點。我想請一些建議....

+10

不要這樣做,除非加載您的應用程序需要很長時間。微軟使用這個,因爲Office可能需要一段時間才能加載。 –

+0

也許對你有意思,但是會讓你的用戶煩惱。 – JohnFx

回答

4

如果您使用的是WPF,則可以使用System.Windows.SplashScreen對象。

在WinForms中,它有點難度,但您可以使用example located here來開始。

請記住,啓動畫面是指當應用程序需要一段時間加載以幫助用戶感覺發生某些事情時的情況。如果你只是推遲了5秒的應用程序負載,你實際上是退化您的用戶的體驗。五秒鐘是一個很長的時間...

+0

不在WinForms中;在C#中。在VB.NET中有[My.Application.SplashScreen](http://msdn.microsoft.com/en-us/library/1t310742(v = VS.90).aspx)屬性。 – GSerg

+0

是的,在VB.NET中,ApplicationServices命名空間中有許多類似這樣的便利類。 – LBushkin

+0

非常感謝!我想你說的是降低用戶體驗的原因,但我想嘗試一下,只是爲了學習,而你的例子是完美的......感謝 – brisonela

3

那麼,你創建一個窗體,將其邊框設置爲無,放置圖像,一個winforms定時器設置爲5秒後打開主窗體,你打開主窗體走。

然而,更復雜的閃屏(的WinForms)要求GDI +,剪裁等,但這會做我猜...

1

我這樣做是使用「System.Theading」,這工作對我非常好。下面的代碼在單獨的線程上啓動一個「啓動畫面」,而你的應用程序(在我的下面的例子中稱爲MainForm())加載或初始化。首先在你的「main()」方法中(在你的program.cs文件中,除非你重命名了它),你應該顯示你的啓動畫面。這將是一個WinForm或WPF表單,您希望在啓動時向用戶顯示。這是主要推出()如下:

[STAThread] 
    static void Main() 
    { 
     // Splash screen, which is terminated in MainForm.  
     SplashForm.ShowSplash(); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     // Run UserCost. 
    Application.Run(new MainForm()); 
    } 

在你的閃屏的代碼,你需要像下面這樣:

public partial class SplashForm : Form 
{ 

    // Thredding. 
    private static Thread _splashThread; 
    private static SplashForm _splashForm;  

    public SplashForm() 
    { 
     InitializeComponent(); 
    } 

    // Show the Splash Screen (Loading...)  
    public static void ShowSplash()  
    {   
     if (_splashThread == null)   
     {    
      // show the form in a new thread    
      _splashThread = new Thread(new ThreadStart(DoShowSplash));    
      _splashThread.IsBackground = true;    
      _splashThread.Start();   
     }  
    }  

    // Called by the thread  
    private static void DoShowSplash()  
    {   
     if (_splashForm == null)    
      _splashForm = new SplashForm();   
     // create a new message pump on this thread (started from ShowSplash)   
     Application.Run(_splashForm); 
    }  

    // Close the splash (Loading...) screen  
    public static void CloseSplash()  
    {   
     // Need to call on the thread that launched this splash   
     if (_splashForm.InvokeRequired)    
      _splashForm.Invoke(new MethodInvoker(CloseSplash));   
     else    
      Application.ExitThread();  
    } 

} 

這將啓動飛濺的形式在一個單獨的後臺線程允許你繼續同時呈現您的主應用程序。爲了完成並關閉閃屏下來的時候你的應用程序已被初始化你把默認的構造函數中以下(你可以重載的構造函數,如果你想):

這都是不言自明的,你應該能夠自行確定代碼的確切工作。我希望它能幫助你。

+0

注意:這個例子使用了WinForms,並且由於「線程性「的代碼,它不應該減慢應用程序的初始化順序,特別是如果您使用的是多核計算機。話雖如此,上面的評論可以給人一種專業的感覺,但如果你的應用程序快速渲染,可能沒有必要。 – MoonKnight