【问题标题】:InvalidOperationException: Objects is currently used elsewhere! [closed]InvalidOperationException:对象当前在其他地方使用! [关闭]
【发布时间】:2011-07-21 10:24:52
【问题描述】:

我犯了那个错误..我使用循环来遍历要绘制的一堆图像..我还使用多线程..

什么可能导致该问题以及如何预防?

我使用winforms

附加信息:

它告诉我如果我在 GetHDv 方法之后使用图形,调用 ReleaseHDC 方法..

什么意思?

部分代码:

这样创建的线程:

在我这样做之前: BackgroundWorker1.RunWorkerAsync();

现在我正在测试这个:

Backgroundworker back=new backgroundworker(); back.runworkerAsync();

这是异常的根源吗?

【问题讨论】:

  • 一般来说,UI 对象只能在创建它们的线程上使用。这可能是问题所在,但是如果没有看到任何代码就很难判断。一个简短但完整的程序来演示这个问题真的很有帮助。
  • 你能发布一个堆栈跟踪吗? (您的异常应该包含一个)但是如果您要求猜测:您同时在多个线程中使用非线程安全资源...可能的解决方案:删除并发访问情况
  • 嗯。我使用了一个添加到 winform 的后台工作程序。除此之外,我还没有添加到 winform 的另一个线程

标签: c# winforms exception


【解决方案1】:

根据this page

“对象当前正在其他地方使用”的实际情况是 GDI+ 抱怨它的设备上下文 (DC) 尝试使用已经“使用中”。使用 WinForms,这通常 表示发生递归 Graphics.GetHdc。 GetHdc 必须 在任何其他 GetHdc 之前匹配 ReleaseHdc。

如果您从 多个线程。您可能还会遇到 跨线程异常也是如此。在这种情况下的解决方案是 访问表单时不要使用多线程,包括绘图。

【讨论】:

  • 如何使用多线程..?
  • 我有一个后台工作人员(称为:Backgroundworker1,我经常使用它),如果我以编程方式使用一个......它会解决问题吗(每次都会创建一个新的后台工作人员)跨度>
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多