Los datos colocados en el portapapeles de Windows Forms Application no están disponibles
Este artículo le ayuda a resolver el problema en el que los datos colocados en el portapapeles de una aplicación Windows Forms no están disponibles.
Versión del producto original: Microsoft .NET Framework 4.0
Número KB original: 2843635
Síntomas
Ha desarrollado una aplicación con microsoft .NET Framework 4.0. La aplicación crea un nuevo con un formato de portapapeles no registrado y, a System.Windows.Forms.DataObject continuación, llama al System.Windows.Forms.Clipboard archivo .SetDataObject método para colocar el personalizado DataObject en el Windows portapapeles. De forma intermitente, las aplicaciones no pueden recuperar el contenido de esta personalizada IDataObject desde el Portapapeles. Por ejemplo, llamar con el formato de portapapeles especificado devuelve null, en lugar del esperado System.Windows.Forms.Clipboard.GetDataObject colocado anteriormente en el System.Windows.Forms.DataObject Portapapeles.
Causa
Se debe a un error en microsoft .NET Framework 4.0.
Solución
Este error se ha corregido en microsoft .NET Framework 4.5.
Más información
El Windows operativo registra los identificadores de formato del Portapapeles como enteros de 16 bits sin signo con el conjunto de bits inicial. En Microsoft .NET Framework 4.0, la implementación de Windows Forms almacena en caché los identificadores de formato de una lista interna como enteros de 32 bits firmados. Cuando una aplicación llama al método Windows Forms para recuperar un formato especificado, Windows Forms recorre en iteración su lista interna comparando el identificador de formato solicitado (como un entero de 16 bits sin firmar) con el identificador de formato almacenado en caché (almacenado como un entero con signo de IDataObject::GetData IDataObject 32 bits). Sin las conversión correctas, la comparación falla y no se devuelve el formato esperado. Lo que finalmente lleva a la Windows Forms IDataObject::GetData que devuelve null al autor de la llamada.