C# 从另一个线程绘制图像?
我了解到,可以通过使用paint事件进行绘制来提高绘制速度/时间,也可以使用该事件进行无比例绘制 所以我非常想在我的面板上尝试一下 但问题是,图像是在另一个线程中接收的,然后是GUI,我不知道如何将其提供给paint事件 我真的不想调用这些东西(因为这太慢了,至少当我使用它的时候) 代码看起来是这样的C# 从另一个线程绘制图像?,c#,image,panel,draw,C#,Image,Panel,Draw,我了解到,可以通过使用paint事件进行绘制来提高绘制速度/时间,也可以使用该事件进行无比例绘制 所以我非常想在我的面板上尝试一下 但问题是,图像是在另一个线程中接收的,然后是GUI,我不知道如何将其提供给paint事件 我真的不想调用这些东西(因为这太慢了,至少当我使用它的时候) 代码看起来是这样的 protected override void panel1_Paint(object sender, PaintEventArgs e, Image u) { e.Graphi
protected override void panel1_Paint(object sender, PaintEventArgs e, Image u)
{
e.Graphics.DrawImageUnscaled(u, Point.Empty);
}
虽然在那里我尝试使用override to add在字段中添加一个图像,但是我想使它成为静态的,这样我就可以从线程中调用它。遗憾的是,我没有工作
但我试过了
private void panel1_Paint(object sender, PaintEventArgs e)
{
// e.Graphics.DrawImageUnscaled(u, Point.Empty);
}
有一个“工作”的,除了我不能得到它的图像
我尝试创建一个图像变量,然后将图像保存在该变量中,并绘制它。
但是画作从来没有看到过其中的图像,它无法访问图像,因为它是从另一个线程写入的
//initialize
private Image Im;
////////
my Thread
Im = Image.FromStream(....);
////////////7
void panel1_Paint(object sender, PaintEventArgs e)
{
if(Im !=null)
e.Graphics.DrawImageUnscaled(Im, Point.Empty);
}
我就是这样尝试的,但失败了。试试这个e.Graphics.DrawImageUnscaled(Image.FromFile(@“C:\..\..\..\yourimage.jpg”),新的矩形(0,0,200,200));-rect是可选的,您可以使用点和尺寸标注。图像来自一个流,并且始终有一个新的流。您不能使用backgroundworker吗?您看到的确切错误是什么?这是交叉线例外吗?如果是这样,您必须使用BeginInvoke方法在UI线程上绘制,但不知道如何做到这一点。我没有得到一个错误,它只是不工作,因为我不能给油漆的形象,或至少我不知道如何做到这一点。