2012-04-02 40 views
10

Có sự khác biệt nào giữa System.Windows.Clipboard và System.Windows.Forms.Clipboard không?Có sự khác biệt nào giữa System.Windows.Clipboard và System.Windows.Forms.Clipboard không?

Tài liệu dành cho phiên bản System.Windows.Forms nêu rõ rằng để lưu trữ một đối tượng trên khay nhớ tạm, nó phải được tuần tự hóa và ứng dụng của bạn phải có mô hình STA, nhưng tài liệu cho phiên bản System.Windows không ' t danh sách hoặc là một yêu cầu. Là nó? Tại sao có hai lớp học? Có gì khác biệt?

Trong trường hợp nó quan trọng, ứng dụng của chúng tôi là WPF và có tôi biết trước đây là cho WPF và sau này cho Windows.Forms ... nhưng tại sao? Tại sao không chỉ luôn luôn sử dụng phiên bản System.Windows ngay cả với các ứng dụng dựa trên biểu mẫu xem xét nó chỉ là một tham chiếu và ít hạn chế trong việc sử dụng nó, và một đối tượng chỉ là một đối tượng trong .NET.

+0

Chúng tôi có mã WinForms đã sử dụng System.Windows.Clipboard kể từ buổi bình minh của thời gian mà hiện tại đang bẻ khóa. Chuyển sang System.Windows.Forms.Clipboard đã giải quyết vấn đề. TẠI SAO? –

Trả lời

5

Đơn giản: System.Windows.Clipboard (trong PresentationCore.dll) được thiết kế để sử dụng với WPF, trong khi System.Windows.Forms.Clipboard (trong System.Windows.Forms.dll) có nghĩa là dành cho Windows Forms.

Bạn sẽ thường xuyên gặp các lớp dường như giống nhau trong cả hai hội đồng; điều này là do WPF và WinForms dựa trên các hệ thống đủ khác nhau mà nhiều API khung phải được thực hiện khác nhau. Tôi đã không thực sự làm việc với clipboard hệ thống bản thân mình, nhưng tôi đoán là nó có cái gì để làm với WinForms 'gần tương đối với các API cấp thấp Win32. Tôi sẽ không chắc chắn, mặc dù.

Vì bạn đang làm việc với WPF, bạn nên sử dụng System.Windows.Clipboard, vì bề ngoài triển khai khác với WPF so với WinForms.

+1

Trong khi có, tôi biết bạn phải sử dụng chúng trên nền tảng tương ứng của chúng, nhưng điều đó không giải thích sự khác biệt, và tại sao một bên có hạn chế trong khi khác thì không, nhưng họ đang nói chuyện với cùng một COM clipboard. Đó là những gì tôi đang tự hỏi. Ví dụ, kể từ khi phiên bản System.Windows có vẻ ít hạn chế hơn, tại sao thậm chí không phải ứng dụng Windows Forms sử dụng phiên bản đó? – MarqueIV

+0

Tôi không nghĩ sẽ có thêm bất kỳ câu trả lời nào khác vì thế tôi sẽ chấp nhận bạn. Tuy nhiên, về vấn đề serialization, tôi không biết nếu nó là một lỗi trong các tài liệu, hoặc bạn đang thực sự được phép sử dụng một phiên bản không serializable của dữ liệu trong phiên bản WPF. – MarqueIV

0

System.Windows không gian tên là về WPF (cách tạo GUI mới trong Windows), trong khi không gian tên System.Windows.Forms chứa các phần tử về Biểu mẫu (kiểu cũ).

+0

Xem nhận xét của tôi về @BoltClock ở trên, nhưng trong ngắn hạn, điều đó không giải thích sự khác biệt. Điều đó giải thích cách sử dụng. – MarqueIV

+0

Tôi nghĩ sự khác biệt là WPF hoạt động trực tiếp với DirectX cho giao diện người dùng, trong khi Biểu mẫu sử dụng GDI +. Vì vậy, WPF có thể sử dụng nhiều luồng để làm việc với GPU và các thành phần khác. –

+1

Nhưng bảng tạm không có gì để làm với giao diện người dùng. Đó là dữ liệu đằng sau hậu trường, vì vậy không có gì về vấn đề đó. – MarqueIV

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