我正在开发一个多线程应用程序,并且我面临着使用剪贴板的问题(我正在使用 Qlikview API - 我需要将表格复制到 Excel 中),问题是我认为会出现这样的情况:在线程#1中,我打开 QW 文档并复制表格,在将其粘贴到 Excel 工作表之前,线程#2来了并使用剪贴板从其文档中复制表格。我想知道是否可以从多线程应用程序中使用剪贴板?我已经阅读了关于如何使用剪贴板的各种文献,唯一我明白的清楚的是该方法必须是STA(?)。所以我现在有点困惑。谢谢
使用多线程技术,您可以锁定只有一个线程可以同时运行的代码部分。通常这样做是为了在无法同时访问资源的情况下获取锁定(例如剪贴板示例)。
您可以定义以下内容(在此示例中为private
,因此应该放在要放置锁定的类中):
private readonly System.Object MyLock = new System.Object();
lock (MyLock)
{
// Locked Code
}
现在,只有一个线程可以在锁内运行代码。
注意:在您的情况下,如果其他应用程序/用户开始使用剪贴板,这可能仍会导致问题。如果可能的话,您可能需要考虑使用不同于剪贴板的东西。
true
。 在其他线程中,一个while循环检查变量“CLIPBOARD_INUSE”是否为false(资源可用)(在再次检查之前使用Thread.Sleep()
)。 当第一个线程完成使用ClipBoard时,通过将我们创建的控制变量设置回false
来释放资源,以便需要ClipBoard的下一个线程可以使用它。