在 C# 中,可以使用 System.Windows.Forms 命名空间中的 Clipboard 类来读取剪贴板内容。以下是一个使用多线程读取剪贴板内容的示例代码:
using System; using System.Threading; using System.Windows.Forms; public class ClipboardReader { private string clipboardContent; public string ReadClipboardContent() { clipboardContent = null; // 使用 ManualResetEventSlim 来同步多线程操作 using (ManualResetEventSlim resetEvent = new ManualResetEventSlim(false)) { // 启动一个新线程来读取剪贴板内容 Thread thread = new Thread(() => { try { // 在新线程中访问剪贴板 clipboardContent = Clipboard.GetText(); } catch (Exception ex) { // 处理剪贴板访问异常 Console.WriteLine($"读取剪贴板内容失败: {ex.Message}"); } finally { // 释放 ManualResetEventSlim resetEvent.Set(); } }); thread.SetApartmentState(ApartmentState.STA); // 设置单线程单元状态 thread.Start(); // 启动线程 // 等待线程完成并释放 ManualResetEventSlim resetEvent.Wait(); } return clipboardContent; } } public class Program { public static void Main(string[] args) { ClipboardReader clipboardReader = new ClipboardReader(); string clipboardContent = clipboardReader.ReadClipboardContent(); if (!string.IsNullOrEmpty(clipboardContent)) { Console.WriteLine("剪贴板内容: " + clipboardContent); } else { Console.WriteLine("剪贴板为空或读取失败。"); } } }
在上面的示例中,我们使用了 ManualResetEventSlim 来同步多线程操作,以确保剪贴板内容的读取在新线程中完成后再返回。同时,我们还设置了单线程单元状态(STA)以确保在访问剪贴板时不会引发线程异常。
请注意,访问剪贴板可能会涉及到安全性和权限的问题,因此在实际应用中需要谨慎处理剪贴板的访问操作。