I have used the following code to copy files, which gives me the error for large files saying "OutOfMemoryException".
Code:
Private Sub ReadFilesInC()
        ' make a reference to a directory
        Dim di As New IO.DirectoryInfo("c:\")
        Dim diar1 As IO.FileInfo() = di.GetFiles()
        Dim dra As IO.FileInfo

        'list the names of all files in the specified directory
        For Each dra In diar1
            ReadData(dra.FullName)
        Next
    End Sub
    

    Public Function ReadData(ByVal Path As String)
        '--This is the state object that will contain the file 
        '---and the return data.  This class is nescessary because
        '---we dont want the return data overwritten by each 
        '---read method (like it would if it was declared globally)
        Dim tempStateObj As New StateObj

        '--Open up the file we wish to read
        tempStateObj.file = New System.IO.FileStream(Path, IO.FileMode.Open)

        '--Redimension the return data array to the appropriate length        
        ReDim tempStateObj.retData(tempStateObj.file.Length)

        '--Call the Asynch read method.  Pass the byte array we wish to fill
        '---the offset, the length of the file to read, the address of the
        '---callback sub, and finally a state object for our own use.
        tempStateObj.file.BeginRead(tempStateObj.retData, 0, tempStateObj.file.Length, _
            New AsyncCallback(AddressOf OnReadDone), tempStateObj)

        '--Control is immediately given back to the program.  The BeginRead method
        '---Does not block program execution like the Read method, so we are free to 
        '---get back to processing.
        Debug.WriteLine("BeginRead done:  " & Path)

        '--To show that this is a normal thread and not threadpooled:
        Debug.WriteLine(System.Threading.Thread.CurrentThread.IsThreadPoolThread)
    End Function

    Public Sub OnReadDone(ByVal ar As IAsyncResult)
        '--This is the asynchronous callback delegate that is called when the BeginRead
        '---is done processing.

        '--The state object is passed to us in ar.  It is a generic
        '---IAsyncResult, and must be casted into something usable
        '---We know we passed a StateObj class, so we cast it as such
        Dim state As StateObj = CType(ar, StateObj)

        '--From our state object, we must call EndRead(ar) to get the
        '---number of bytes read.  Even if you do not wish to know the 
        '---number of bytes, you must *always* call EndRead in the callback
        Dim bytesRecieved As Int32 = state.file.EndRead(ar)

        '--If you don't wish to know the number of bytes read, do this:
        'state.file.EndRead(ar)

        state.file.Close()

        '--Just to prove that this thread is running in a Threadpool object that 
        '---is managed by the OS:
        Debug.WriteLine(System.Threading.Thread.CurrentThread.IsThreadPoolThread)

        '--Open up a new file to write to
        state.file = New System.IO.FileStream("C:\Somewhere\data.txt.FileMode.Create")

        '--Begin the Asynch write to the file, passing everything and the state object again
        state.file.BeginWrite(state.retData, 0, state.retData.Length, New AsyncCallback(AddressOf OnWriteDone), state)


        '--At this point, the sub will terminate and the thread will go back to the
        '---internal threadpool.  It is important not to do anything that will block or take
        '---large amounts of time in this sub.  The internal threadpool is limited to
        '---25 threads total, and it is important to return the thread as quick as possible
        '---to the pool for further use.
    End Sub

    Public Sub OnWriteDone(ByVal ar As IAsyncResult)
        '--This is the asynchronous callback delegate that is called when the BeginWrite
        '---is done processing.

        '--The state object is passed to us in ar.  It is a generic
        '---IAsyncResult, and must be casted into something usable
        '---We know we passed a StateObj class, so we cast it as such
        Dim state As StateObj = CType(ar, StateObj)

        '--From our state object, we must call EndWrite(ar).  You must 
        '---*always* call EndWrite in the callback
        state.file.EndWrite(ar)

        state.file.Close()

        '--At this point, the sub will terminate and the thread will go back to the
        '---internal threadpool.  It is important not to do anything that will block or take
        '---large amounts of time in this sub.  The internal threadpool is limited to
        '---25 threads total, and it is important to return the thread as quick as possible
        '---to the pool for further use.
    End Sub



'----------
'--Our StateObj Class
'----------

Public Class StateObj
    Public file As System.IO.FileStream
    Public retData() As Byte
End Class
I have the dot net 4 so i can't use ".ReadAsync()". Please give me the sample code so that I can achieve the asynchronous file copy....