【问题标题】:Clipboard Task error剪贴板任务错误
【发布时间】:2013-05-23 03:21:35
【问题描述】:

这是我得到的错误:

发生“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();
}

【问题讨论】:

  • 我正在使用控制台项目
  • 对。那么你会使用winforms库吗? (System.Windows.Forms.Clipboard)
  • 答案在错误信息中:“确保您的 Main 函数上标记了 STAThreadAttribute。”
  • 是的,这是主要功能上的标记,但我仍然收到错误。

标签: c#


【解决方案1】:

剪贴板只能从 STA 线程(通常是 UI 线程)访问。因此,您需要调用 UI 线程或另一个 STA 线程来对剪贴板执行任何操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多