ソケット通信からimage
asbyte[]
を受信していて、それを a で表示しようとしていpictureBox
ます。コードを実行すると、次のようなメッセージ エラーのみが表示されます。"NullReferenceException"
例外を処理するキャッチはex1
あり、私はチェックしましたが、そうでpic
はないnull
ので、この例外が発生している理由を理解できません。
これは私のコードです:
try
{
if (pictureBox1.InvokeRequired)
{
try
{
pic = imageEmp;
addControlHandler c = new addControlHandler(addPic);
this.Invoke(c);
}
catch (Exception exc) { MessageBox.Show(exc.Message); }
}
else
{
pictureBox1.Image = ByteToImage(imageEmp);
}
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message);
}
public void addPic() //when invokeRequired == true
{
pictureBox1.Image = ByteToImage(pic);
}
変換するコードはbyte[]
次のImage
とおりです。
public Image ByteToImage(byte[] imageBytes) //convert byte[] to image
{
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = new Bitmap(ms);
return image;
}
更新 1 : ハンスの回答に関して、私は彼に次の変更を加えます:
ByteToImage をハンスの答えに変更し、エラーがどこにあるかを確認するために、次の行をthis.Invoke(c)
次の場所に追加しました。
if (c != null)
{
try
{
this.Invoke(c);
}
catch (Exception e_c)
{
MessageBox.Show(e_c.Message, "exc from e_c");
}
}
これは私に例外を与えます:NullReferenceException
助けてくれてありがとう!
更新 2:動作するようになりました。JPG の代わりに JPEG 画像を送信すると、表示されるようになりました。なぜこれが起こるのか分かりませんが、今は問題なく動作しています。