2009-11-04 27 views
7

Tôi đang hiển thị biểu mẫu giật gân bằng cách bắt đầu một chuỗi mới ngay trước khi chạy biểu mẫu chính của tôi.Phương pháp hiển thị màn hình Splash thực hành tốt nhất C#

Trong phương thức được chạy bởi chuỗi này, tôi đang sử dụng Application.Run như được hiển thị trong Tùy chọn 1 bên dưới. Đây có phải là một cách chính xác để làm điều này, hoặc là có vấn đề chờ đợi cho tôi becaue tôi đã gọi Application.Run hai lần? Một lựa chọn khác là Tùy chọn 2, cũng được hiển thị bên dưới nơi tôi gọi .ShowDialog() để hiển thị biểu mẫu.

Bản thân biểu mẫu giật đóng sau một khoảng thời gian cụ thể, được kiểm soát bên trong biểu mẫu và cả hai tùy chọn đều hoạt động tốt.

Vì vậy, câu hỏi của tôi là: Tùy chọn nào được ưu tiên - Tùy chọn 1 hoặc Tùy chọn 2? Nếu bạn có thể đưa ra lý do cụ thể cho một hoặc khác sẽ là tuyệt vời.

Cảm ơn.

Snippet Main:

// Run splash screen thread. 
Thread splash = new Thread(new ThreadStart(ShowSplash)); 
splash.Start(); 

// Run main application. 
Application.Run(new MainForm()); 

Hiện lựa chọn hình thức giật gân 1:

static void ShowSplash() 
    { 
     Application.Run(new SplashForm()); 
    } 

Hiện hình thức lựa chọn splash 2:

static void ShowSplash() 
    { 
     using (SplashForm splash = new SplashForm()) 
     { 
      splash.ShowDialog(); 
     } 
    } 
+2

Tải xuống trình phản xạ và xem cách thực hiện cho VB =). –

+0

Tôi có phải là người duy nhất ghét màn hình giật gân không? Chỉ cần tải các ứng dụng fricking đã và ngừng lãng phí thời gian của tôi. –

+0

@Trickster: Tôi đã làm chính xác điều đó và thấy rằng cuối cùng là một cuộc gọi đến Application.Run được sử dụng để hiển thị hình thức giật gân. Cảm ơn ý tưởng! Tôi đã đánh dấu câu trả lời của bạn là đã được chấp nhận. – Andy

Trả lời

3

Lựa chọn 2 có thể sẽ gặp phải rắc rối vì sau đó bạn đang sử dụng cùng một Mesageloop như MainForm nhưng từ một chủ đề khác.

Tùy chọn 1 là tốt.

+0

@Henk: Thực ra, tôi nghĩ điều đó có thể không chính xác. Tôi tin rằng việc gọi Application.Run từ một chủ đề mới sẽ bắt đầu một chuỗi giao diện người dùng mới, khác với chủ đề chính. Có một cái nhìn ở đây: http://stackoverflow.com/questions/745057/how-to-start-a-ui-thread-in-c Andy

+0

Đăng lại liên kết :) http://stackoverflow.com/ câu hỏi/745057/how-to-start-a-ui-thread-in-c – Andy

+0

Andy, Tùy chọn 2 không sử dụng (thêm) App.Run() –

1

tôi nhận ra rằng đây có thể là một quan điểm không bình thường nhưng có bạn xem không sử dụng một màn hình Splash và thay vào đó hiển thị thông tin về 'trang chào mừng' hoặc 'giúp đỡ> về 'màn hình thay thế?

Có một số ít lý do để làm điều này:

  1. Trừ khi bạn nhận được vào multi-threading, một màn hình Splash có thể không sơn lại đúng nếu một số cảnh báo/MsgBox bật lên trên đầu trang của nó, phủ nhận lợi ích của màn hình giật gân hoàn toàn.

  2. Màn hình ngăn xếp hiển thị 'bạn có plugin x, y và z' được cài đặt không thể thực sự nói điều này cho đến khi thông tin đó được tải lên. Vào thời điểm thông tin này được tải, ứng dụng của bạn đã sẵn sàng để đi, vì vậy bạn sẽ đóng màn hình giật gân hoặc nó sẽ nằm trong cách của người dùng.

  3. Nếu tôi nhìn đi và bỏ lỡ màn hình giật gân, tôi sẽ bỏ lỡ bất kỳ thông tin nào bạn đang nói với tôi. Nếu 'Giấy phép hết hạn sau 3 ngày' là một phần của thông tin đó và hôm nay là Thứ Sáu, điều đó có nghĩa là tôi sẽ không nhận ra rằng vào thứ Hai, tôi không thể sử dụng ứng dụng. Ít người biết đến, nhưng tôi đã nhìn thấy nó.

+0

"' Trừ khi bạn nhận được vào đa luồng' "- Có * rằng * khó để tạo ra một chuỗi mới()'? –

+0

Trên một lưu ý mang tính xây dựng hơn - màn hình giật gân của Photoshop làm cho nó trông giống như nó tải gần như ngay lập tức ngay cả khi nó không, IMO. –

Các vấn đề liên quan