public static void HandleRemoteDesktopResponse(Client client, DesktopResponse packet) { if (client.Value.FrmRdp == null) return; if (packet.Image == null) { if (client.Value.FrmRdp != null) client.Value.FrmRdp.UpdateImage(client.Value.LastDesktop); client.Value.LastDesktop = null; client.Value.LastDesktopSeen = true; return; } // we can not dispose all bitmaps here, cause they are later used again in `client.Value.LastDesktop` if (client.Value.LastDesktop == null) { if (client.Value.StreamCodec != null) { client.Value.StreamCodec.Dispose(); } client.Value.StreamCodec = new UnsafeStreamCodec(); if (client.Value.LastQuality != packet.Quality || client.Value.LastMonitor != packet.Monitor) { client.Value.LastQuality = packet.Quality; client.Value.LastMonitor = packet.Monitor; } using (MemoryStream ms = new MemoryStream(packet.Image)) { Bitmap newScreen = client.Value.StreamCodec.DecodeData(ms); client.Value.LastDesktop = newScreen; if (client.Value.FrmRdp != null) client.Value.FrmRdp.UpdateImage(newScreen, true); newScreen = null; } } else { using (MemoryStream ms = new MemoryStream(packet.Image)) { lock (client.Value.StreamCodec) { if (client.Value.LastQuality != packet.Quality || client.Value.LastMonitor != packet.Monitor) { if (client.Value.StreamCodec != null) { client.Value.StreamCodec.Dispose(); } client.Value.StreamCodec = new UnsafeStreamCodec(); client.Value.LastQuality = packet.Quality; client.Value.LastMonitor = packet.Monitor; } Bitmap newScreen = client.Value.StreamCodec.DecodeData(ms); client.Value.LastDesktop = newScreen; if (client.Value.FrmRdp != null) client.Value.FrmRdp.UpdateImage(newScreen, true); newScreen = null; } } } packet.Image = null; client.Value.LastDesktopSeen = true; }
public static void HandleRemoteDesktopResponse(Client client, DesktopResponse packet) { if (client.Value.FrmRdp == null) return; if (packet.Image == null) { try { client.Value.FrmRdp.Invoke( (MethodInvoker) delegate { client.Value.FrmRdp.picDesktop.Image = client.Value.LastDesktop; }); } catch { } client.Value.LastDesktop = null; client.Value.LastDesktopSeen = true; return; } // we can not dispose all bitmaps here, cause they are later used again in `client.Value.LastDesktop` if (client.Value.LastDesktop == null) { client.Value.StreamCodec = new UnsafeStreamCodec(); if (client.Value.LastQuality != packet.Quality || client.Value.LastMonitor != packet.Monitor) { client.Value.LastQuality = packet.Quality; client.Value.LastMonitor = packet.Monitor; } using (MemoryStream ms = new MemoryStream(packet.Image)) { Bitmap newScreen = client.Value.StreamCodec.DecodeData(ms); client.Value.LastDesktop = newScreen; try { client.Value.FrmRdp.Invoke( (MethodInvoker) delegate { client.Value.FrmRdp.picDesktop.Image = (Bitmap) newScreen.Clone(); }); } catch { } newScreen = null; } } else { using (MemoryStream ms = new MemoryStream(packet.Image)) { lock (client.Value.StreamCodec) { if (client.Value.LastQuality != packet.Quality || client.Value.LastMonitor != packet.Monitor) { client.Value.StreamCodec = new UnsafeStreamCodec(); client.Value.LastQuality = packet.Quality; client.Value.LastMonitor = packet.Monitor; } Bitmap newScreen = client.Value.StreamCodec.DecodeData(ms); client.Value.LastDesktop = newScreen; try { client.Value.FrmRdp.Invoke( (MethodInvoker) delegate { client.Value.FrmRdp.picDesktop.Image = (Bitmap) newScreen.Clone(); }); } catch { } newScreen = null; } } } packet.Image = null; client.Value.LastDesktopSeen = true; }