2012-04-02 16 views
10

¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?

La documentación de la versión System.Windows.Forms establece específicamente que para almacenar un objeto en el portapapeles debe ser serializable y su aplicación debe tener el modelo STA, pero la documentación de la versión de System.Windows no funciona lista t como un requisito. ¿Lo es? ¿Por qué tener dos clases? ¿Cual es la diferencia?

En caso de que importe, nuestra aplicación es WPF y sí sé que la primera es para WPF y la segunda para Windows.Forms ... pero ¿por qué? ¿Por qué no usar siempre la versión de System.Windows incluso con aplicaciones basadas en formularios, ya que solo es una referencia y es menos restrictiva en su uso, y un objeto es solo un objeto en .NET.

+0

Tenemos el código de WinForms que ha usado System.Windows.Clipboard desde el principio de los tiempos que ahora mismo se está rompiendo. El cambio a System.Windows.Forms.Clipboard resolvió el problema. ¿POR QUÉ? –

Respuesta

5

Simple: System.Windows.Clipboard (en PresentationCore.dll) está diseñado para su uso con WPF, mientras que System.Windows.Forms.Clipboard (en System.Windows.Forms.dll) es para Windows Forms.

A menudo se encontrará con clases aparentemente idénticas en ambos conjuntos; esto se debe a que WPF y WinForms se basan en sistemas suficientemente diferentes como para que muchas API de framework se implementen de forma diferente. Realmente no he trabajado con el portapapeles del sistema, pero creo que tiene algo que ver con la proximidad relativa de WinForms a las API Win32 de bajo nivel. Sin embargo, no estaría seguro.

Dado que está trabajando con WPF, debe usar System.Windows.Clipboard, ya que aparentemente la implementación es diferente para WPF que para WinForms.

+1

Si bien sé que se supone que debes usarlos en sus respectivas plataformas, pero eso no explica la diferencia, y por qué un lado tiene una restricción mientras que el otro no, sin embargo, están hablando con el mismo COM-basado portapapeles. Eso es lo que me pregunto. Por ejemplo, dado que la versión de System.Windows parece ser mucho menos restrictiva, ¿por qué ni siquiera la aplicación Windows Forms usaría esa? – MarqueIV

+0

No creo que haya más respuesta que esta, así que aceptaré la tuya. Aún así, con respecto al problema de serialización, no sé si es un error en los documentos, o si está permitido utilizar una versión no serializable de los datos en la versión de WPF. – MarqueIV

0

El espacio de nombres de System.Windows es sobre WPF (nueva forma de crear GUI en Windows), mientras que el espacio de nombres System.Windows.Forms contiene elementos sobre Forms (estilo antiguo).

+0

Vea mi comentario a @BoltClock arriba, pero en resumen, eso no explica la diferencia. Eso es explicar el uso. – MarqueIV

+0

Creo que la diferencia es que WPF trabaja directamente con DirectX para la interfaz de usuario, mientras que Forms usa GDI +. Entonces, WPF puede estar usando múltiples hilos para trabajar con la GPU y otros componentes. –

+1

Pero el portapapeles no tiene nada que ver con la interfaz de usuario. Son datos detrás de escena, por lo que nada de eso debería importar. – MarqueIV

Cuestiones relacionadas