Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个线程绘制图像?_C#_Image_Panel_Draw - Fatal编程技术网

C# 从另一个线程绘制图像?

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

我了解到,可以通过使用paint事件进行绘制来提高绘制速度/时间,也可以使用该事件进行无比例绘制

所以我非常想在我的面板上尝试一下

但问题是,图像是在另一个线程中接收的,然后是GUI,我不知道如何将其提供给paint事件

我真的不想调用这些东西(因为这太慢了,至少当我使用它的时候)

代码看起来是这样的

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线程上绘制,但不知道如何做到这一点。我没有得到一个错误,它只是不工作,因为我不能给油漆的形象,或至少我不知道如何做到这一点。