Este team redactor ha pasado horas investigando respuestas a tus búsquedas, te regalamos la respuesta así que esperamos serte de gran apoyo.
Solución:
Hay dos clases que viven en diferentes ensamblajes y diferentes espacios de nombres.
-
WinForms: use la siguiente declaración de espacio de nombres, asegúrese
Main
está marcado con[STAThread]
attribute:using System.Windows.Forms;
-
WPF: use la siguiente declaración de espacio de nombres
using System.Windows;
-
consola: añadir referencia a
System.Windows.Forms
use la siguiente declaración de espacio de nombres, asegúrese deMain
está marcado con[STAThread]
attribute. Guía paso a paso en otra respuesta.using System.Windows.Forms;
Para copiar un exacto string (literal en este caso):
Clipboard.SetText("Hello, clipboard");
Para copiar el contenido de un cuadro de texto, use TextBox.Copy() u obtenga el texto primero y luego establezca el valor del portapapeles:
Clipboard.SetText(txtClipboard.Text);
Vea aquí un ejemplo. O… Documentación oficial de MSDN o Aquí para WPF.
Observaciones:
-
El portapapeles es un concepto de interfaz de usuario de escritorio, intentar configurarlo en el código del lado del servidor como ASP.Net solo establecerá el valor en el servidor y no tiene impacto en lo que el usuario puede ver en su navegador. Mientras que la respuesta vinculada permite ejecutar el lado del servidor del código de acceso del Portapapeles con
SetApartmentState
es poco probable lo que quieres lograr. -
Si después de seguir la información en este código de pregunta todavía obtiene una excepción, consulte el error “El subproceso actual debe establecerse en apartamento de un solo subproceso (STA)” en la copia string al portapapeles
-
Esta pregunta/respuesta cubre .NET regular, para .NET Core ver – .Net Core – ¿copiar al portapapeles?
Para consola proyectos paso a paso, primero tendrá que agregar el System.Windows.Forms
referencia. Los siguientes pasos funcionan en Visual Studio Community 2013 con .NET 4.5:
- En Explorador de la soluciónexpanda su proyecto de consola.
- Botón derecho del ratón Referenciasluego haga clic Añadir referencia…
- En el Ensambles grupo, bajo EstructuraSeleccione
System.Windows.Forms
. - Hacer clic OK.
Luego, agrega lo siguiente using
declaración con los demás en la parte superior de su código:
using System.Windows.Forms;
Luego, agregue cualquiera de los siguientes Clipboard
.SetText
declaraciones a su código:
Clipboard.SetText("hello");
// OR
Clipboard.SetText(helloString);
Y por ultimo agregar STAThreadAttribute
para usted Main
método de la siguiente manera, para evitar una System.Threading.ThreadStateException
:
[STAThreadAttribute]
static void Main(string[] args)
// ...
Mi experiencia con este problema usando WPF C# haciendo frente al portapapeles y System.Threading.ThreadStateException
está aquí con mi código que funcionó correctamente con todos los navegadores:
Thread thread = new Thread(() => Clipboard.SetText("String to be copied to clipboard"));
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start();
thread.Join();
créditos a esta publicación aquí
Pero esto solo funciona en localhost, así que no intente esto en un servidor, ya que no funcionará.
En el lado del servidor, lo hice usando zeroclipboard
. La única manera, después de mucha investigación.
Nos puedes corroborar nuestra función ejecutando un comentario o puntuándolo te damos la bienvenida.