【问题标题】:C# draw to bitmap from 2nd threadC# 从第二个线程绘制位图
【发布时间】:2012-06-22 18:26:47
【问题描述】:

我正在尝试绘制public static Bitmap,这是我的PictureBox-Control 的图像。绘图在同一个线程中工作正常,但是当我启动第二个线程时没有任何反应,没有绘制任何内容。有谁知道解决方案?

绘制代码:

Graphics g = Graphics.FromImage(screen);  
g.Clear(Color.Black);Brushes.White);  
g.Dispose();

//编辑:
请原谅我。 Bitmap 存储在另一个名为 Form1 的类中。线程类是 DrawHelper。为了访问位图,我向 DrawHelper 提供了 Form1 的引用(从 Form1 调用)。
我希望这有帮助。我可以贴出所有的代码,但是会有很多不必要的代码。

【问题讨论】:

  • 我们需要更多的代码。不过,我的怀疑是位图不会在线程之间跳转。你在做什么来传输信息?

标签: c# multithreading picturebox


【解决方案1】:

您的位图绑定到窗体窗口消息循环。如果您尝试访问类似的内容,则必须使用 Invoke 或 BeginInvoke。

这里:http://msdn.microsoft.com/en-us/library/ms171728.aspx

编辑。阅读评论后,我可以告诉你,你有一个错误,位图只是没有得到你认为它得到的信息。使用线程本身没有任何关系......

如果你真的需要解决它,你应该用 2 个线程、一个按钮和一个位图创建简单的原型,然后尝试从线程 #2 中绘制任何东西,看看什么不起作用。如果即使这样也行不通 - 在此处发布代码。 (请不要复制/粘贴整个应用程序 - 保持重点)

另外你应该把 try/catch 放在里面 using。位图的行为可能只是因为 using 内部存在不可见的异常。

【讨论】:

  • 我正在使用调用。没有 Invoke 我得到一个异常,正如预期的那样。
  • 我正在调用。现在有例外。位图只是不改变。
  • 对不起,三连发责备。也不例外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2012-10-28
相关资源
最近更新 更多