2013-04-05 51 views
9

Tôi muốn hỏi cách tạo màn hình tải (chỉ là ảnh hoặc thứ gì đó) xuất hiện khi chương trình đang được tải và biến mất khi chương trình tải xong.C# WinForm - tải màn hình

trong phiên bản fancier, tôi đã thấy thanh quy trình (%) được hiển thị. làm thế nào bạn có thể có điều đó, và làm thế nào để bạn tính% để hiển thị trên nó?

Tôi biết có sự kiện Form_Load(), nhưng tôi không thấy sự kiện Form_Loaded() hoặc% làm thuộc tính/thuộc tính ở bất kỳ đâu.

+0

Biểu mẫu tải là gì? Bạn có bất kỳ hoạt động truy vấn cơ sở dữ liệu nào, các hoạt động chuyên sâu của CPU hay không, cái gì bạn thực sự cần để hiển thị "thanh tiến trình" hoặc bạn chỉ muốn một màn hình giật gân? –

+0

Tôi muốn có một màn hình giật gân, nhưng tôi cũng muốn biết về thanh tiến trình. – CaTx

Trả lời

26

tất cả những gì bạn cần để tạo một biểu mẫu dưới dạng màn hình giật gân và hiển thị nó trước khi bạn bắt đầu chính hiển thị trang đích và đóng splash này khi trang đích được tải.

using System.Threading; 
using System.Windows.Forms; 

namespace MyTools 
{ 
    public class SplashForm : Form 
    { 
     //Delegate for cross thread call to close 
     private delegate void CloseDelegate(); 

     //The type of form to be displayed as the splash screen. 
     private static SplashForm splashForm; 

     static public void ShowSplashScreen() 
     { 
      // Make sure it is only launched once. 

      if (splashForm != null) 
       return; 
      Thread thread = new Thread(new ThreadStart(SplashForm.ShowForm)); 
      thread.IsBackground = true; 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
     } 

     static private void ShowForm() 
     { 
      splashForm = new SplashForm(); 
      Application.Run(splashForm); 
     } 

     static public void CloseForm() 
     { 
      splashForm.Invoke(new CloseDelegate(SplashForm.CloseFormInternal)); 
     } 

     static private void CloseFormInternal() 
     { 
      splashForm.Close(); 
      splashForm = null; 
     } 
    } 
} 

và chức năng chính của chương trình trông như thế này:

[STAThread] 
static void Main(string[] args) 
{ 
    SplashForm.ShowSplashScreen(); 
    MainForm mainForm = new MainForm(); //this takes ages 
    SplashForm.CloseForm(); 
    Application.Run(mainForm); 
} 
+0

Tôi có thể sử dụng mã này để gọi một biểu mẫu lớn và chậm từ một biểu mẫu khác không? Giống như một 'Đăng nhập -> Màn hình chính'? –

+0

màn hình chính của bạn là điểm khởi đầu cho quá trình programe của bạn. vì vậy bạn cần một ví dụ sống động của chính thì bạn có thể. – JSJ

+0

Cảm ơn bạn! Đây là một hướng dẫn tuyệt vời! – tkrn

1

Nếu bạn đang đi để hiển thị các SplashForm nhiều hơn một lần trong ứng dụng của bạn, hãy chắc chắn để thiết lập các biến splashForm null nếu không bạn sẽ gặp lỗi.

static private void CloseFormInternal() 
{ 
    splashForm.Close(); 
    splashForm = null; 
} 
+0

Tôi chỉnh sửa câu trả lời mã. Cảm ơn. – Pedro77