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;

しかし、画像がピクチャボックスに割り当てられることはなく、画像変数は常にnullです。

バッファからのバイトを使用して HDD にイメージ ファイルを作成することで、バッファからのイメージが実際に存在するかどうかを確認しましたが、イメージは問題なく正常に作成されました。

私は何を間違えましたか?

4

2 に答える 2

1

インスタンス化オブジェクトが破棄されたときにイメージメモリが解放されるという問題に苦しんでいる可能性があると思います。そのtry/catchでエラーをトラップしていますか? その MemoryStream オブジェクトが破棄されると、作成に使用されたイメージも破棄されると思います。

于 2013-05-23T18:25:22.840 に答える