hãy có một cái nhìn vào mã sau:Sử dụng Application.Run() trên chủ đề khác nhau
var splashForm = new SplashForm();
m_Thread = new Thread(() => System.Windows.Forms.Application.Run(splashForm))
m_Thread.Start();
// Do some initialization
// ...
// the following method just invokes `Close()` on the right thread
splashForm.Shutdown();
// Loop until the thread is no longer alive
// ...
System.Windows.Forms.Application.Run(mainForm);
Có vẻ như tất cả các hoạt động tốt: đầu tiên tôi nhìn thấy Splashscreen, sau đó mainform được bắt đầu. Nhưng bằng cách nào đó tôi nhận được các lỗi lạ, như: các yếu tố đồ họa (một ProgressBar bất tận) không hiển thị chính xác.
EDIT: Tôi có hai thanh tiến trình, một biểu tượng trên màn hình, trên biểu mẫu chính. Cả hai đều thể hiện cùng một hành vi (sai) trong vô tận: không tiến bộ, chỉ là nền thuần khiết. /EDIT
Theo tôi, điều này là do cuộc gọi của Application.Run()
về các chủ đề khác nhau. lỗi này có thể được loại bỏ bằng cách gọi bất kỳ chức năng/tài sản của MainForm trước khi bắt đầu Splashscreen - như thế nào, ví dụ
mainForm.Text = mainForm.Text;
bất cứ ai có thể vui lòng xác nhận rằng mã này có thể gây ra vấn đề - hoặc là nó nên cư xử sao và tôi có để tìm lỗi ở đâu đó khác?
Tôi đã tìm kiếm các triển khai màn hình splash và tôi biết rằng nó có thể được thực hiện khác nhau. Nhưng tôi quan tâm đến việc hiểu việc triển khai này và các vấn đề có thể xảy ra của nó. Cảm ơn!
Progressbars có thể hơi đặc biệt, vì chúng có thể xén chuỗi của riêng chúng để thực hiện điều đó. Bạn có thể cô lập và mô tả những gì đang xảy ra không? Giống như sử dụng PB bị chặn, hãy thêm PB với giá trị = 50, v.v. –