2010-09-02 36 views
14

Sự kiện CompositionTarget.Rendering là EventHandler cũ đơn giản, với EventArgs cũ đơn giản. Tuy nhiên, trong cuộc sống thực, nó dường như luôn luôn được một ví dụ của RenderingEventArgs. Vì vậy, trình xử lý sự kiện của bạn phải bắt đầu bằng cách truyền EventArgs để lấy thông tin hữu ích từ chúng.Tại sao CompositionTarget.Rendering lấy EventArgs thay vì RenderingEventArgs?

Tại sao không phải là sự kiện loại EventHandler<RenderingEventArgs>, vì vậy chúng tôi có thể nhận được đối số dễ dàng hơn (và quan trọng hơn, vì vậy chúng tôi thậm chí có thể biết đối số là ở đó)? Tại sao Microsoft lại chọn cho sự kiện này chữ ký sai?

Tôi tự hỏi về khả năng tương thích ngược - đã có bản phát hành ở đó RenderingEventArgs chưa tồn tại chưa? - nhưng đó không phải là trường hợp. Theo MSDN, RenderingEventArgs và CompositionTarget được giới thiệu trong cùng một bản phát hành trên cả hai nền tảng - trong WPF, cả hai đều được thêm vào .NET 3.0; trong Silverlight, cả hai đều được thêm vào trong Silverlight 3.0.

Nếu nó đưa ra bất kỳ loại gợi ý nào, tôi chạy ngang qua một số discussion thread cũ, nơi ai đó nói, "Đại biểu đang sử dụng EventArgs vì có một số loại hiệu suất giành chiến thắng trên marshalling bằng cách làm điều đó." Nếu ai đó có thể giải thích loại chiến thắng nào có thể đạt được, tôi sẽ sẵn sàng chấp nhận điều đó như một câu trả lời.

+0

+1: Điều tương tự cũng xảy ra với các sự kiện chuột. Bạn thường cần phải tự thay đổi chúng thành một MouseEventArgs cụ thể hơn để nhận được các thuộc tính * cool *. –

Trả lời

2

Chiến thắng marshalling có thể là điều quản lý bộ nhớ mức thấp. Bởi vì EventArgs là hình thức phổ biến nhất của đối số cho một sự kiện có khả năng được cấp phát bộ đệm trong việc thực hiện xử lý sự kiện cấp thấp của plugin. Nó thậm chí có thể chỉ là một chiến thắng trên một số nền tảng và chỉ với dựng hình chuyên sâu.

Tốc độ hiển thị đã được cải thiện đáng kể trong các phiên bản SL mới nhất và tôi nghi ngờ rằng đó là các chỉnh sửa như thế này đang nhận được điều này.

Đó là một nỗi đau khi giao diện bị ảnh hưởng do việc triển khai nhưng đó là một giao dịch công bằng nếu chiến thắng là đáng kể. Ngoài ra, trong trường hợp này không có tổn thất thực sự đối với chức năng vì nó khá dễ dàng để truyền và lấy dữ liệu cơ bản.

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