0

我有一个类,我从缓冲区获取图像,并将图像设置为将保存图像的变量类型图像。

class MyClass
{
    public Image MyImage;
    private void ReadingCallBack(IAsyncResult ar)
    {
        Socket CurrentSocket = null;

        try
        {
            CurrentSocket = (Socket)ar.AsyncState;
            int recvsize = CurrentSocket.EndReceive(ar);
            Array.Resize(ref buffer, recvsize);
            string stream = ASCIIEncoding.ASCII.GetString(buffer);
            switch (stream.Substring(stream.IndexOf('[') + 1, stream.IndexOf(']') - 1))
            {
                case "Screenshot":

                    byte[] imgbuff = new byte[buffer.Length - 12];
                    Buffer.BlockCopy(buffer, 12, imgbuff, 0, imgbuff.Length);

                    MemoryStream ms = new MemoryStream(imgbuff);
                    MyImage = Image.FromStream(ms);

                    ms.Close();
                    break;
            }

            buffer = new byte[1024 * 5000];
            CurrentSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReadingCallBack), CurrentSocket);
        }
        catch (Exception er)
        {
            //etc
        }
    }
}

在 WindowsForm 中,我在构造函数中有以下代码: 每当用户想要时,都会调用 WindowsForm。

MyClass Class = new MyClass();
while (Class.MyImage == null)
{
    System.Threading.Thread.Sleep(1);
    Application.DoEvents();
}

pictureBox1.Image = Class.MyImage;

但是,图像永远不会分配给图片框,图像变量始终为空。

我已经通过使用缓冲区中的字节在我的硬盘上创建图像文件来检查缓冲区中的图像是否真的存在,并且图像已成功创建而没有任何问题。

我做错了什么?

4

2 回答 2

1

我认为您可能会遇到在处理实例化对象时释放图像内存的问题。您是否在该 try/catch 中捕获错误?我认为当那个 MemoryStream 对象被释放时,它用来创建的图像也会被释放。

于 2013-05-23T18:25:22.840 回答
0

您在 MyClass 中的图像创建应该在一个方法中,然后您需要使用缓冲区作为参数调用该方法。

于 2013-05-23T17:21:37.693 回答