以下是我遇到的错误:
发生了'System.Threading.ThreadStateException'类型的异常 在System.Windows.Forms.dll中但未在用户代码中处理
附加信息:当前线程必须设置为单线程 在进行OLE调用之前的公寓(STA)模式。确保你的 主函数上标有STAThreadAttribute。
我正在尝试在Task
内为剪贴板分配值。当我执行代码时,我得到上面的错误。
这是剪贴板代码:
static public class ClipBoard
{
static private string _data = string.Empty;
static public Semaphore ClipBoardSemaphore = new Semaphore(1, 1);
static public void SetData(string data)
{
Clipboard.Clear(); //error here
Clipboard.SetDataObject(data, true);
_data = data;
}
static public string GetData()
{
return _data;
}
}
正如您所看到的,清除剪贴板时会发生错误。 以下是调用任务的代码:
for (int i = 0; i < zom.Count; i++)
{
Task t = Task.Factory.StartNew(zom[i].Process);
t.Wait();
}
答案 0 :(得分:3)
只能从STA线程(通常是UI线程)访问剪贴板。因此,您需要调用UI线程或其他STA线程来对剪贴板执行任何操作。