2010-01-15 22 views

Trả lời

5

Form.Shown event là nơi tốt để thực hiện bất kỳ quá trình khởi tạo nào có thể mất nhiều hơn một giây. Biểu mẫu. Hiển thị chỉ xuất hiện một lần, chỉ sau biểu mẫu đầu tiên được hiển thị cho người dùng.

Rõ ràng nếu bạn có một khởi tạo dài, bạn vẫn cần phải cung cấp một số loại phản hồi trực quan và có thể vô hiệu hóa các phần của biểu mẫu cho đến khi hoàn thành. Nhưng nếu khởi tạo là không thể tránh khỏi, Form.Shown ít nhất cho phép bạn cho phép người dùng biết ứng dụng không bị đóng băng và đưa ra phản hồi về những gì nó thực sự đang thực hiện.

So với Form.Load: Từ góc độ người dùng, ứng dụng của bạn sẽ được cảm nhận để khởi động nhanh hơn vì Biểu mẫu của bạn đã hiển thị trong khi khởi tạo xong.

So với Form.Activated: Bạn không cần phải lo lắng về việc khởi tạo của bạn chạy nhiều lần vì sự kiện hoạt tính được gọi mỗi khi hình thức của bạn được ẩn/hiển thị, giảm thiểu/tối đa, vv

So với constructor: Tương tự như Form.Load biểu mẫu của bạn sẽ không hiển thị cho đến khi khởi tạo xong. Ngoài ra, bạn phải cẩn thận hơn về các vấn đề thời gian/chuỗi liên quan đến các điều khiển có thể không được khởi tạo đầy đủ.

+0

Tôi đã thử sử dụng sự kiện được hiển thị và thấy rằng nó không hoạt động như bạn mô tả: Phương pháp này sẽ được chạy lại mỗi khi hộp thoại được hiển thị. Kết quả là, nếu tôi sử dụng nó để điền một hộp danh sách thì nó kết thúc với các mục được lặp lại cho mỗi lần hộp thoại được hiển thị. Tôi bối rối.... – Stewart

1

Thực hiện các công cụ trong sự kiện Tải sẽ làm cho các ngoại lệ khi không đọc được dễ dàng hơn và IMHO sạch hơn về mặt ngữ nghĩa. Thực tế, nó không tạo ra nhiều sự khác biệt.

4

Để khởi chạy nặng hơn, thường được thực hiện trong sự kiện tải. Các nhà xây dựng thường được sử dụng để khởi tạo nhanh chóng, đơn giản các trường. Ví dụ: nếu bạn phải thực hiện cuộc gọi phương thức cho một phụ thuộc bên ngoài, bạn nên thực hiện điều đó từ tải.

2

Tùy thuộc vào loại khởi tạo. Ví dụ, khởi tạo trường đơn giản, có thể được thực hiện trong hàm tạo và điều này giúp bạn không phải treo lên một sự kiện, có một phương thức bổ sung, v.v.

Tuy nhiên, trong một số trường hợp, hàm tạo không có thông tin bạn nhu cầu. Ví dụ, nếu bạn muốn làm những việc khác nhau tùy thuộc vào việc bạn đang ở chế độ thiết kế hay chế độ chạy (ví dụ trong chế độ chạy, bạn sẽ kết nối với nguồn dữ liệu, nhưng trong chế độ thiết kế bạn muốn hiển thị dữ liệu mẫu), thì điều này phải được hoãn lại cho đến sau khi xây dựng, vì khung không thiết lập DesignMode cho đến khi đối tượng được xây dựng.

+0

Không thực sự đúng. Bạn có thể kiểm tra LicenseManager.UsageMode trong hàm khởi tạo (và * chỉ * trong hàm tạo) để kiểm tra xem bạn có đang ở chế độ thiết kế hay không. – Eric

3

Khởi tạo nhiều hơn cũng có thể không phải là ý tưởng hay trong sự kiện tải vì nó có thể làm tăng thời gian tải và có thể gây khó chịu cho người dùng cuối. Tôi thích làm một khởi tạo cơ bản (nói .. mà mất < 10 giây) trong Form Load và làm phần còn lại của công việc nặng sau khi nó được hiển thị cho người dùng. Để người dùng đợi chỉ báo tiến trình có thể được hiển thị.

0

Hãy nghĩ xem điều gì sẽ xảy ra nếu bạn chạy Show hoặc ShowDialog cho cùng một Biểu mẫu hai lần. Tất cả những thứ không thể thay đổi giữa hai cuộc gọi đó phải ở trong hàm tạo; tất cả mã khởi tạo tùy thuộc vào Hiển thị (Hộp thoại) theo sau cuộc gọi phải có trong trình xử lý sự kiện sẽ được gọi cho mỗi cuộc gọi đó. Ví dụ, chủ sở hữu của Biểu mẫu được thông qua trong ShowDialog, không phải trong hàm tạo và có thể khác nhau cho 2 lệnh gọi ShowDialog khác nhau, vì vậy mọi thứ phụ thuộc vào chủ sở hữu không được ở trong hàm tạo.

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