MaxDes101
asked on
vb.net background worker stops processing code on large file copy
Basically small files (under 500MB) all process perfectly, but large files such as 3-4GB movie files hang up the code so it never finishes...
basically it doesn't look like the BGW does anything after the bgw.reportprogress(0, filename) code. It should email and it should delete the original file, but it stops.
Does a BGW have a timeout or anything like that?
Can someone please take a look and tell me why it would only stop working on large files? It will mostly process one large file but stops directly after the bgw progress changed command.
basically it doesn't look like the BGW does anything after the bgw.reportprogress(0, filename) code. It should email and it should delete the original file, but it stops.
Does a BGW have a timeout or anything like that?
Can someone please take a look and tell me why it would only stop working on large files? It will mostly process one large file but stops directly after the bgw progress changed command.
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
Dim FileName As String
Dim HasMoreItems As Boolean
Dim Mbpslower As String
Mbpslower = "15Mbps"
While True
Files.MRE.Reset()
HasMoreItems = False
Do
FileName = Nothing
SyncLock Files.SharedObject
If Files.ToBeProcessed.Count > 0 Then
FileName = Files.ToBeProcessed.Peek
End If
End SyncLock
If Not IsNothing(FileName) Then
While IsFileInUse(FileName)
Debug.Print(DateTime.Now.ToString() & " : File in use! Waiting 5 seconds...")
System.Threading.Thread.Sleep(5000) ' wait 5 seconds to try again
End While
Dim hiDef As String = "HD"
Dim FVOD1 As String = "FVOD"
Dim Fifteen As String = "15Mbps"
If FileName.ToLower.Contains(hiDef.ToLower) Or FileName.ToLower.Contains(FVOD1.ToLower) Or FileName.ToLower.Contains(Fifteen.ToLower) Or FileName.ToLower.Contains("ipvod".ToLower) Then
Good(FileName)
Else
Bad(FileName)
End If
End If
SyncLock Files.SharedObject
HasMoreItems = (Files.ToBeProcessed.Count > 0)
End SyncLock
Loop While HasMoreItems
Files.MRE.WaitOne()
End While
'End If
End Sub
Private Sub Good(ByVal FileName As String)
Dim Mbpslower As String
Mbpslower = "15Mbps"
Try
If FileName.ToLower.Contains(Mbpslower.ToLower) Then
bgw.ReportProgress(0, FileName)
System.IO.File.Copy("C:\video\" & FileName, "X:\encoded2\mcvod\transcode_needed\" & FileName, True)
Else
System.IO.File.Copy("C:\video\" & FileName, "X:\CPS\" & FileName, True)
System.IO.File.Copy("C:\video\" & FileName, "X:\Encoded2\" & FileName, True)
End If
SyncLock Files.SharedObject
Files.ToBeProcessed.Dequeue()
End SyncLock
bgw.ReportProgress(0, FileName)
Catch ex As Exception
System.Threading.Thread.Sleep(5000) ' wait 5 seconds before trying again
End Try
If FileName.ToLower.Contains(Mbpslower.ToLower) Then
GoTo finish
Else
GoTo email
End If
email:
'Email code removed, but this code works perfectly
Dim objWriter As New System.IO.StreamWriter("C:\UploadLog.txt", True)
objWriter.WriteLine(FileName)
objWriter.Close()
GoTo finish
finish:
System.IO.File.Delete("C:\Video\" & FileName)
End Sub
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
Dim FileName As String
Dim HasMoreItems As Boolean
Dim Mbpslower As String
Mbpslower = "15Mbps"
While True
Files.MRE.Reset()
HasMoreItems = False
Do
FileName = Nothing
SyncLock Files.SharedObject
If Files.ToBeProcessed.Count > 0 Then
FileName = Files.ToBeProcessed.Peek
End If
End SyncLock
If Not IsNothing(FileName) Then
While IsFileInUse(FileName)
Debug.Print(DateTime.Now.ToString() & " : File in use! Waiting 5 seconds...")
System.Threading.Thread.Sleep(5000) ' wait 5 seconds to try again
End While
Dim hiDef As String = "HD"
Dim FVOD1 As String = "FVOD"
Dim Fifteen As String = "15Mbps"
If FileName.ToLower.Contains(hiDef.ToLower) Or FileName.ToLower.Contains(FVOD1.ToLower) Or FileName.ToLower.Contains(Fifteen.ToLower) Or FileName.ToLower.Contains("ipvod".ToLower) Then
Good(FileName)
Else
Bad(FileName)
End If
End If
SyncLock Files.SharedObject
HasMoreItems = (Files.ToBeProcessed.Count > 0)
End SyncLock
Loop While HasMoreItems
Files.MRE.WaitOne()
End While
'End If
End Sub
Private Sub Good(ByVal FileName As String)
Dim Mbpslower As String
Mbpslower = "15Mbps"
Try
If FileName.ToLower.Contains(Mbpslower.ToLower) Then
bgw.ReportProgress(0, FileName)
System.IO.File.Copy("C:\video\" & FileName, "X:\encoded2\mcvod\transcode_needed\" & FileName, True)
Else
System.IO.File.Copy("C:\video\" & FileName, "X:\CPS\" & FileName, True)
System.IO.File.Copy("C:\video\" & FileName, "X:\Encoded2\" & FileName, True)
End If
SyncLock Files.SharedObject
Files.ToBeProcessed.Dequeue()
End SyncLock
bgw.ReportProgress(0, FileName)
Catch ex As Exception
System.Threading.Thread.Sleep(5000) ' wait 5 seconds before trying again
End Try
If FileName.ToLower.Contains(Mbpslower.ToLower) Then
GoTo finish
Else
GoTo email
End If
email:
'Email code removed, but this code works perfectly
Dim objWriter As New System.IO.StreamWriter("C:\UploadLog.txt", True)
objWriter.WriteLine(FileName)
objWriter.Close()
GoTo finish
finish:
System.IO.File.Delete("C:\Video\" & FileName)
End Sub
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER