dutchmaster11@gmail.com
New member
- Joined
- Nov 29, 2007
- Messages
- 1
- Programming Experience
- 5-10
I have a form. When the form loads, a connection to an image server is immediately established. A request is sent to the image server for an image, and the image data begins to come over. After all the data is received, and written to a file - all I want is for the image to show up in a picturebox.
The image that is now on my hard drive is FINE. it loads into any image previewing application.
The weird thing is, that once the image is finished saving, the form freezes (giving me a "NOT RESPONDING" message in the title bar). the weird thing is that once the image is saved to the HDD, the application really shouldn't be doing ANYTHIHNG. I can not for the life of me figure out whats hanging up the application... PLEASE HELP!
The image that is now on my hard drive is FINE. it loads into any image previewing application.
The weird thing is, that once the image is finished saving, the form freezes (giving me a "NOT RESPONDING" message in the title bar). the weird thing is that once the image is saved to the HDD, the application really shouldn't be doing ANYTHIHNG. I can not for the life of me figure out whats hanging up the application... PLEASE HELP!
VB.NET:
Imports System
Imports System.Text
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports Microsoft.VisualBasic
Public Class frmImg
Dim B() As Byte 'JPG Byte Handler
Dim B2() As Byte 'JPG Byte Handler
Dim picLength As Long
Dim ExpectedLength As Long
Dim EntranceName As String
Dim EntryID As Integer
Dim HasUnlock As Boolean
Dim Server As String
Dim Port As Integer
Dim Client As TcpClient
Dim NetStream As NetworkStream
Dim DataBuffer(9000) As Byte
Dim evtConnEstb As New AsyncCallback(AddressOf onConnectionEstablished)
Dim evtDataArrival As New AsyncCallback(AddressOf DataProcessing)
Public Sub New(ByVal vEntranceName As String, ByVal vEntryID As Integer, ByVal vHasUnlock As Boolean, _
ByVal vServer As String, ByVal vPort As Integer)
InitializeComponent()
'Set Modular Variables
EntranceName = vEntranceName
EntryID = vEntryID
HasUnlock = vHasUnlock
Server = vServer
Port = vPort
Show()
'Immediately connect to image server
Client = New TcpClient
Client.BeginConnect(Server, Port, evtConnEstb, Nothing)
End Sub
Public Sub onConnectionEstablished(ByVal dr As IAsyncResult)
'This sub is called as soon as the TCPClient connects.
RequestImage()
End Sub
Sub RequestImage()
Button1.Enabled = False
'Send request for image
Dim message As String = "E" & EntryID
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
NetStream = Client.GetStream
NetStream.Write(data, 0, data.Length)
'Start to read response(s)
NetStream.BeginRead(DataBuffer, 0, 9000, evtDataArrival, Nothing)
End Sub
Public Sub DataProcessing(ByVal dr As IAsyncResult)
'This sub is called whenever data is received from the TCPClient
'Read number of bytes in package
Dim numberOfBytes As Long = NetStream.EndRead(dr)
picLength = picLength + numberOfBytes
'Translate the Bytes into a string
Dim strData As String = System.Text.Encoding.ASCII.GetString(DataBuffer)
'the term '§VIDS' or '?VIDS' Signifies the begining of new image data coming in.
'That accounts for the first 5 bytes.
'The next 9 bytes represent the number of bytes the algorythm should expect.
'PicLength will always be 14 more than ExpectedLength due to this.
If strData.Substring(0, 5) = "§VIDS" Or strData.Substring(0, 5) = "?VIDS" Then
'Blank out B() which holds final image data WITH preceding 14 byte information
ReDim B(0)
'Assign image size from server to ExpectedLength
ExpectedLength = strData.Substring(5, 9)
Try
'Delete file, if it exsits
Kill("c:\test.jpg")
Catch ex As Exception
End Try
End If
'Assign the new data received to a byte array B2()
B2 = DataBuffer
'Attach new B2() Bytes onto the end of B()
ReDim Preserve B((B.Length - 1) + (B2.Length - 1))
B2.CopyTo(B, B.Length - B2.Length)
Debug.Write("Expected Length: " & ExpectedLength _
& vbCrLf & "Actual Length: " & picLength - 14 & vbCrLf & strData.Length & " (" & numberOfBytes & ")" & vbCrLf & vbCrLf)
'Check to see if file is done
If (picLength - 14) = ExpectedLength Then
'Remove the first 14 Bytes
Dim FinalBytes(B.Length - 14) As Byte
Dim I As Integer
For I = 14 To B.Length - 1
FinalBytes(I - 14) = B(I)
Next
'If file is done transferring, write the data to a file
Dim fs As FileStream = New FileStream("c:\test.jpg", FileMode.OpenOrCreate)
Dim w As BinaryWriter = New BinaryWriter(fs)
w.Write(FinalBytes)
w.Close()
fs.Close()
Debug.WriteLine("JPG File written: " & Date.Now & vbCrLf & vbCrLf)
'THIS IS WHERE I NOTICE THE APP FREEZING.
'EVEN THOUGH THE APP FREEZES, EVERYTHING SEEMS TO WORK PERFECTLY UP TO THAT POINT.
Button1.Enabled = True
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Image = Image.FromFile("C:\test.jpg")
End Sub
End Class