C# Winform在后台线程中访问Clipboard

本文介绍了一种在后台线程中异步获取剪贴板文本的方法,解决了因UI线程限制导致无法直接访问Clipboard的问题。通过创建一个新的线程并设置为STA Apartment State,成功实现了异步获取Clipboard中的文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到一个很蛋疼的需求:运行一个exe把指定文件上传到一个内部的文件系统里去,并把exe返回的信息通过email发出去。

1. exe的返回信息是保存在Clipboard里面的。这个很蛋疼!!!

2. 运行exe/发送email必须是异步的。

在UI线程上面我们可以直接通过System.Windows.Forms.Clipboard.GetText()拿到Clipboard里面的文本,但是在后台线程里是不能访问Clipboard的(Clipboard.GetText()永远返回null)。Google完解决方案如下:

View Code
 1     class ClipboardAsync
2 {
3 private string _getText;
4 private void ThGetText(object format)
5 {
6 try
7 {
8 _getText = format == null ? Clipboard.GetText() : Clipboard.GetText((TextDataFormat)format);
9 }
10 catch
11 {
12 _getText = null;
13 }
14 }
15
16 public static string GetText()
17 {
18 var instance = new ClipboardAsync();
19 var staThread = new Thread(instance.ThGetText);
20 staThread.SetApartmentState(ApartmentState.STA);
21 staThread.Start();
22 staThread.Join();
23 return instance._getText;
24 }
25
26 public static string GetText(TextDataFormat format)
27 {
28 var instance = new ClipboardAsync();
29 var staThread = new Thread(instance.ThGetText);
30 staThread.SetApartmentState(ApartmentState.STA);
31 staThread.Start(format);
32 staThread.Join();
33 return instance._getText;
34 }
35 }

转载于:https://www.cnblogs.com/sstar/archive/2012/04/06/2435031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值