El tema es que para guardarla en formato jpg con codigo de visual es my lento, podrias usar GDI o DirectX pero no estan disponibles en todos los sistemas, algo que se me acurre que podrias hacer es escalar la imagen a un 75% o 50% esto va a redicir la calidad un poco y el tamano, y luego usar 7-zip o zlib para comprimirla. 7-zip lo podes llamar directamente usando el shell y tine muy buena compresion.
O sino lo otro podria ser utilizando la tecnica que usan los compresores de video o mismo el gif animado, que seria basicamente mandar la primer imagen completa y de ahi en mas solamente mandar los cambios ,pero esto es un poco mas dificil.
Mira por lo que veo el problema parece estar es como manejas los datos, lo que tenes que hacer es usar un buffer antes de separarlos por que lo que envias no siempre es lo que llega.
Para darte una idea lo que podes hacer es
usar "|" para indicar el final de un paquete y a su vez un "sub" delimitador para separar la informacion dentro del paquete.
cuando llega la informacion lo que haces es ponerla en el buffer
buffer = buffer & nuevos_datos
despues lo que haces es usar la funcion datos()= split(buffer,"|")
si lo que tenes en el buffer esta "completo" que no hay un paquete por la mitad al usar el split el ultimo dato "ubound(datos)" tendria que ser vbnullstring en ese caso lo que haces es
for i = 0 to ubound(datos) aca iria el if left(datos(i),3)= "env" next buffer= vbnullstring
y si el caso es que el ultimo paquete esta incompleto ubound(datos)<>vbnullstring lo que haces es guardarlo
for i = 0 to ubound(datos) -1 aca iria el if left(datos(i),3)= "env" next buffer= ubound(datos) & "|"
HaDeS mi intencion aca es cooperar y ayudar a los demas, si quiero competir me anoto en un concurso ok? si mi codigo esta mal o malinterprete una pregunta lo lamento soy humano.
Con respecto a las 3 soluciones que se presentaron te digo la tuya es literalmente lo que el dice, cosa que no tiene mucho sentido, para que utilizar un timer para verificar el tiempo cada 1 seg si la funcion que vas a ejecutar esta dentro de un loop? en todo caso es exactamente lo mismo que presento H4NG3R y la respuesta de el es mas simple y no depende de un timer. Con respecto a mi funcion "que si funciona" es mucho mas flexible, podes ejecutar tu codigo cana N millisecs o podes poner un intervalo de 1 millisec y vas a tener practicamente el el mismo efecto que en un loop y dependiendo de donde pongas tu funcion si en el if o en el else tambien podes ejecutar el codigo cada N segundos.
HaDeS, el timer si se ejecuta cada 1 segundo pero la funcion no la funcion se ejecuta cada 10 si miras bien el codigo vas a ver que "Debug.Print "OK" se ejecuta cada 10 seg. Sino hacelo facil abri VB pega el code y probalo. Y si el lo que quiere es alreves lo unico que tiene que hacer y invertir el sigo , negar el if o usar un else, pero al final de cuentas es lo mismo.