Есть ли разница между System.Windows.Clipboard и System.Windows.Forms.Clipboard?

Есть ли разница между System.Windows.Clipboard и System.Windows.Forms.Clipboard?

В документации к версии System.Windows.Forms указано, что для хранения объекта в буфере обмена он должен быть сериализуемым, и ваше приложение должно иметь модель STA, но в документации для версии System.Windows нет список как требование. Это? Почему есть два класса? Какая разница?

В случае, если это имеет значение, наше приложение - WPF, и да, я знаю, что первый для WPF, а второй для Windows.Forms... но почему? Почему бы просто не использовать версию System.Windows даже при использовании приложений на основе форм, считая ее просто ссылкой и менее ограничительной в ее использовании, а объект является просто объектом .NET.

Ответ 1

Простой: System.Windows.Clipboard (в PresentationCore.dll) предназначен для использования с WPF, а System.Windows.Forms.Clipboard (в System.Windows.Forms.dll) предназначен для Windows Forms.

Вы часто сталкиваетесь с кажущимися одинаковыми классами в обеих сборках; это связано с тем, что WPF и WinForms основаны на достаточно разных системах, которые многие API-интерфейсы инфраструктуры должны выполняться по-разному. Я действительно не работал с системным буфером обмена, но я предполагаю, что он имеет какое-то отношение к относительной близости WinForms к низкоуровневым API Win32. Я бы не был уверен, хотя.

Поскольку вы работаете с WPF, вы должны использовать System.Windows.Clipboard, поскольку якобы реализация для WPF различна, чем для WinForms.

Ответ 2

Пространство имен System.Windows относится к WPF (новый способ создания графического интерфейса пользователя в Windows), а пространство имен System.Windows.Forms содержит элементы о формах (старый стиль).