【发布时间】:2017-11-21 23:13:57
【问题描述】:
所以 .. 我正在创建一个 Simple Desktop Viewer 应用程序。
但是当我尝试反序列化通过流发送的图像时,我不断收到此 System.outOfMmemoryException。
发送代码:
private Image getScreen() {
Rectangle bound = Screen.PrimaryScreen.Bounds;
Bitmap ScreenShot = new Bitmap(bound.Width,bound.Height,PixelFormat.Format32bppArgb );
Graphics image = Graphics.FromImage(ScreenShot);
image.CopyFromScreen(bound.X,bound.Y,0,0,bound.Size,CopyPixelOperation.SourceCopy);
return ScreenShot;
}
private void SendImage() {
BinaryFormatter binFormatter = new BinaryFormatter();
binFormatter.Serialize(stream, getScreen());
}
请注意,图像是使用一个计时器发送的,该计时器一旦启动就会调用 SendImage()
这是我的接收代码:
BinaryFormatter binFormatter = new BinaryFormatter();
Image img = (Image)binFormatter.Deserialize(stream);
picturebox1.Image=img;
所以..怎么了?
【问题讨论】:
-
“所以..怎么了?”你可能内存不足。正如错误所说。
-
好的,请问如何解决?
-
如果我理解正确,您是在尝试编写某种“远程桌面”程序吗?这个话题实在是太宽泛了,无法在 Stack Overflow 上讨论。
-
我猜是这样,但我并不是真的想讨论它,只是想找出这段代码有什么问题,以及如何解决它。
-
.NET 程序员倾向于忽略 Dispose() 方法,他们可以保持一段时间。在他们开始使用 Image 或 Bitmap 之前,这是一个用于大量非托管内存的非常小的 .NET 包装器。 SendImage() 需要使用
using语句,以便正确处理 getScreen() 的返回值。
标签: c# tcpclient networkstream tcpserver binaryformatter