C#如何从第二个线程绘制到位图

3

我想要绘制到一个public static Bitmap中,这是我的PictureBox控件的图像。在同一个线程中绘制可以正常工作,但当我启动第二个线程时,没有任何反应,不会绘制任何内容。有人知道解决方案吗?

用于绘制的代码:

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

//编辑:
请原谅我。Bitmap被存储在另一个名为Form1的类中。线程类是DrawHelper。为了访问Bitmap,我使用了这个(从Form1调用)将Form1的引用给予DrawHelper。
希望这能帮到你。我可以发布所有的代码,但会有很多不必要的代码。


我们需要更多的代码。虽然我怀疑位图在线程之间没有成功传递。你是如何传输信息的? - Ben Barden
1个回答

2
你的位图绑定到了表单窗口消息循环。如果你想要访问类似的内容,你必须使用Invoke或BeginInvoke。
这里有一个链接:http://msdn.microsoft.com/en-us/library/ms171728.aspx 编辑后,我可以告诉你,你有一个错误,位图并没有获得你认为它获得的信息。这与使用线程本身无关...
如果你真的需要解决这个问题,你应该创建一个简单的原型,包括两个线程、一个按钮和一个位图,然后尝试从第二个线程绘制任何东西,并查看哪些地方不起作用。如果连这个都不行,请在这里发布代码。(请不要复制/粘贴整个应用程序——保持到一个点)
另外,你应该在using内部添加try/catch。位图可能会因为using中隐藏的异常而表现出它所做的事情。

1
我正在使用Invoke。如果没有使用Invoke,我会得到一个异常,这是预料之中的。 - David
1
我正在调用。现在没有异常。位图就是不改变。 - David
1
抱歉三次发帖怪我。这里没有任何例外。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接