gpt4 book ai didi

C# images, object in use elshere 错误

转载 作者:行者123 更新时间:2023-11-30 21:16:42 25 4
gpt4 key购买 nike

我是 C# 的新手,所以如果我没有很好地解释这一点,请原谅。

我正在从我的计算机摄像头中检索图像,并将它们显示在 PictureBox 中,我正在将它们编码为 jpeg 并将它们发送到共享字典。这是我的代码:

void CurrentCamera_OnImageCaptured(object sender, CameraEventArgs e)
{
this.pictureBoxMe.Image = e.Image;

if (myName != "" && Form1.PicSent)
{
SendPic sendP = new SendPic((Image)e.Image.Clone());
new System.Threading.Thread(new System.Threading.ThreadStart(sendP.send)).Start();
}

}

public class SendPic
{
Image im;
public SendPic (Image im)
{
this.im = im;
}
public void send(){

Form1.PicSent = false;
var memoryStream = new MemoryStream();

im.Save(memoryStream, ImageFormat.Jpeg);

var byteArray = memoryStream.ToArray();

Form1.sd["/" + myName + "/video"] = byteArray;

memoryStream.Close();
Form1.PicSent = true;

}
}

问题是我收到“对象当前正在别处使用”。线上报错:SendPic sendP = new SendPic((Image)e.Image.Clone());

根据我发现的其他论坛帖子,我已经对其进行了更改,以便将图像传递到线程,并且它是一个克隆。但是我仍然遇到同样的错误(尽管它在崩溃之前持续的时间更长)。

我读过一些关于锁定的内容?在这种情况下我该如何实现?或者还有什么我需要做的吗?

谢谢。

最佳答案

它的行为就像 OnImageCaptured 方法在线程上运行一样。这对于相机接口(interface)来说并非不可能。设置断点并使用调试器的 Debug + Windows + Threads 窗口查看运行此代码的线程。

故障模式是 UI 线程正在访问图像以绘制图片框,同时该工作线程调用 Clone()。 GDI+ 不允许两个线程同时访问同一个图像对象。它确实是片状的,无法说明 UI 线程开始绘制的确切时刻。 PicSent 是另一个等待发生的事故。

关于C# images, object in use elshere 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5080514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com