您的位置:首页 >C# 如何操作剪贴板详解
发布于2026-01-10 阅读(0)
扫一扫,手机访问
Clipboard.SetText 会抛出 ThreadStateException 异常,因其要求调用线程为 STA 模式;控制台程序需加 [STAThread] 特性,WPF/WinForms 需确保在 UI 线程调用;富文本需用 SetData 指定 DataFormats.Html 或 Rtf;读取前应先用 ContainsText() 判断;跨进程操作受权限、延迟和沙盒限制。

在 WinForms 或 WPF 之外的上下文(比如控制台程序、后台线程、ASP.NET 后端)调用 Clipboard.SetText 会直接抛出 System.Threading.ThreadStateException,因为剪贴板 API 要求调用线程必须是 STA(Single-Threaded Apartment)模式。
Dispatcher.Invoke)Main 方法上加 [STAThread] 特性[STAThread]
static void Main(string[] args)
{
Clipboard.SetText("hello");
}
Clipboard.SetText 只写入纯文本格式(DataFormats.Text),如果想粘贴到 Word、Outlook 或浏览器中保留样式,得用 Clipboard.SetData 并指定格式。
DataFormats.Html,注意需包含标准 HTML 包装结构(如 <html><body>...</body></html>)DataFormats.Rtf,内容需是合法 RTF 字符串(以 {\rtf1... 开头)MyDataClass)需实现序列化,并用 typeof(MyDataClass) 作为格式名string html = @"<html><body><b>Bold</b> and <i>italic</i></body></html>"; Clipboard.SetData(DataFormats.Html, html);
直接调用 Clipboard.GetText() 在剪贴板为空或不含文本时会返回空字符串,但无法区分“真为空”还是“有其他格式(如图片)但无文本”。更安全的做法是先用 Clipboard.ContainsText() 或 Clipboard.ContainsData(...) 检查。
ContainsText() 等价于 ContainsData(DataFormats.Text)Clipboard.GetImage(),但该方法在无图像时返回 null,不抛异常Clipboard.GetData(...),并手动转换类型if (Clipboard.ContainsText())
{
string text = Clipboard.GetText();
Console.WriteLine(text);
}
在某些沙盒环境(如 Windows AppContainer 应用、部分企业策略锁定的系统)中,剪贴板访问可能被限制;另外,Clipboard.Clear() 或连续多次 SetXXX 调用后,其他进程可能短暂读不到最新内容——这是 Windows 剪贴板消息队列同步机制导致的,不是 .NET Bug。
Clipboard.Clear() 清除残留内容Application.Current.Dispatcher.Invoke 封装最常被忽略的是:即使代码没报错,剪贴板内容也可能没真正生效——尤其在远程桌面或虚拟机中,需确认宿主机剪贴板共享已启用且未被策略禁用。
上一篇:曙光英雄墨翟怎么样-墨翟玩法攻略
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9