线程里显示图片流问题
public delegate void MyInvoke(Stream receiveStream);
private void Updatepicturex(Stream receiveStream)
{
pictureBox1.Image = System.Drawing.Image.FromStream(receiveStream);
}
private void TheardFunc()
{
MyInvoke mi = new MyInvoke(Updatepicturex);
this.BeginInvoke(mi, new object[] { receiveStream });
}
这样为什么会出错?
------解决方案--------------------1.Updatepicturex是在主线程之外的另一个线程,你传递的是一个Stream对像,如果你在主线程中关闭或释放了receiveStream ,那么在线程Updatepicturex中将报错,改成下面的方法
private delegate void MyInvoke(byte[] byImage);
参数为byte[],不使用对象
在线程Updatepicturex中再读到对象中
private void Updatepicturex(byte[] byImage)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(byImage,0,byImage.Length );
lock(this)
pictureBox1.Image = Image.FromStream(ms);
ms.Close();
ms.Dispose();
}// end ms
}
2.Updatepicturex是另一个线程,所以不能直接使用主线程中的pictureBox1,虽然直接访问并不会出错,但是可能会带来其它一些未知的问题,加锁也不是一个好办法,应该在主线程中更新pictureBox1