我怎么能复制一个字符串(例如“hello”)到系统剪贴板在c#,所以下次我按CTRL+V我会得到“hello”?


当前回答

如果您不想将线程设置为STAThread,请使用Clipboard。SetDataObject sthhere(对象):

Clipboard.SetDataObject("Yay! No more STA thread!");

其他回答

在ASP.net web表单中使用@page AspCompat="true",将system.windows.forms添加到你的项目中。 在你的网上。配置添加:

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" />
  </appSettings>

然后你可以使用:

Clipboard.SetText(CreateDescription());

我在这个问题上使用WPF c#处理剪贴板和System.Threading.ThreadStateException的经验是我的代码在所有浏览器上都正确工作:

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();

这篇文章的功劳在这里

但这只在本地主机上工作,所以不要在服务器上尝试这一点,因为它不会工作。

在服务器端,我使用zeroclipboard。唯一的办法,经过大量研究。

Clipboard.SetText("hello");

您需要使用System. windows . forms或System。Windows命名空间。

对于控制台项目,您必须首先添加System.Windows.Forms引用。以下步骤在Visual Studio Community 2013和。net 4.5中工作:

在“解决方案资源管理器”中展开控制台项目。 右键单击引用,然后单击添加引用… 在“程序集”组中,在“框架”下,选择System.Windows.Forms。 单击OK。

然后,将下面的using语句添加到代码顶部的其他语句中:

using System.Windows.Forms;

然后,添加下列剪贴板之一。SetText语句到你的代码:

Clipboard.SetText("hello");
// OR
Clipboard.SetText(helloString);

最后,将STAThreadAttribute添加到Main方法中,以避免System.Threading.ThreadStateException:

[STAThreadAttribute]
static void Main(string[] args)
{
  // ...
}

这在。net core上工作,不需要引用System.Windows.Forms

using Windows.ApplicationModel.DataTransfer;

DataPackage package = new DataPackage();
package.SetText("text to copy");
Clipboard.SetContent(package);

它是跨平台的。在windows上,您可以按windows + V查看剪贴板历史记录