我正在编写一个 Windows 窗体应用程序来自动化一个旧软件。为了在该软件和我的应用程序之间传输信息,我使用剪贴板。单击旧软件上的按钮会将一些信息放入剪贴板。
要使用 Clipboard.GetText,我应该从 Windows 窗体调用它。但我不希望 UI 线程上的所有内容。
在另一个任务中调用 Clipboard.GetText 时,我得到它说你应该从 STAThread 调用 Clipboard.GetText。
最佳答案
您将不得不改变您的期望。标准要求是只有 UI 线程与剪贴板交互。
从技术上讲,如文档中所述,实际要求只是 single-threaded apartment (STA) threads可以访问剪贴板。由于大多数后台线程(如 .NET 中的 ThreadPool 类创建的线程)都是多线程单元 (MTA) 线程,因此它们无法访问剪贴板。您可以通过手动创建自己的 STA 线程并在其上运行消息泵来解决此问题,但仅使用 UI 线程要容易得多,因此每个人都这样做。
但是,尝试使用剪贴板在两个进程之间共享信息是一个糟糕的设计。剪贴板旨在供用户 存储信息。您写入剪贴板的任何内容都会破坏用户存储在那里的任何内容。如果您的应用程序这样做,并覆盖了我想保留的内容,我会非常生您的气。
有更好的方法让进程相互通信;搜索“进程间通信”(缩写为“IPC”)以获取各种想法。
关于c# - 如何通过任务使用 Clipboard.GetText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828588/