What's Wrong With My VB.NET Code Of Windows Forms Application?
- by Krishanu Dey
I've to forms frmPrint & frmEmail and a dataset(MyDataset) with some DataTable and DataTable Adapters. In frmPrint I've the following Sub
Public Sub StartPrinting()
try
adapterLettersInSchedules.Fill(ds.LettersInSchedules)
adapterLetters.Fill(ds.Letters)
adapterClients.Fill(ds.Clients)
adapterPrintJobs.GetPrintJobsDueToday(ds.PrintJobs, False, DateTime.Today)
For Each prow As MyDataSet.PrintJobsRow In ds.PrintJobs
Dim lisrow As MyDataSet.LettersInSchedulesRow = ds.LettersInSchedules.FindByID(prow.LetterInScheduleID)
If lisrow.Isemail = False Then
Dim clientrow As MyDataSet.ClientsRow = ds.Clients.FindByClientID(prow.ClientID)
Dim letterrow As MyDataSet.LettersRow = ds.Letters.FindByID(lisrow.LetterID)
'prow.
'lisrow.is
Label1.SuspendLayout()
Label1.Refresh()
Label1.Text = "Printing letter"
txt.Rtf = letterrow.LetterContents
txt.Rtf = txt.Rtf.Replace("<%Firstname%>", clientrow.FirstName)
txt.Rtf = txt.Rtf.Replace("<%Lastname%>", clientrow.LastName)
txt.Rtf = txt.Rtf.Replace("<%Title%>", clientrow.Title)
txt.Rtf = txt.Rtf.Replace("<%Street%>", clientrow.Street)
txt.Rtf = txt.Rtf.Replace("<%City%>", clientrow.City)
txt.Rtf = txt.Rtf.Replace("<%State%>", clientrow.State)
txt.Rtf = txt.Rtf.Replace("<%Zip%>", clientrow.Zip)
txt.Rtf = txt.Rtf.Replace("<%PhoneH%>", clientrow.PhoneH)
txt.Rtf = txt.Rtf.Replace("<%PhoneW%>", clientrow.PhoneW)
txt.Rtf = txt.Rtf.Replace("<%Date%>", DateTime.Today.ToShortDateString)
Try
PDoc.PrinterSettings = printDlg.PrinterSettings
PDoc.Print()
prow.Printed = True
adapterPrintJobs.Update(prow)
Catch ex As Exception
End Try
End If
Next prow
ds.PrintJobs.Clear()
Catch ex As Exception
MessageBox.Show(ex.Message, "Print", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
And in frmEmail i've the Following Sub
Public Sub SendEmails()
try
adapterLettersInSchedules.Fill(ds.LettersInSchedules)
adapterLetters.Fill(ds.Letters)
adapterClients.Fill(ds.Clients)
adapterEmailJobs.GetEmailJobsDueToday(ds.EmailJobs, False, Today)
Dim ls_string As String
For Each prow As MyDataSet.EmailJobsRow In ds.EmailJobs
Dim lisrow As MyDataSet.LettersInSchedulesRow = ds.LettersInSchedules.FindByID(prow.LetterInScheduleID)
If lisrow.Isemail = True Then
Dim clientrow As MyDataSet.ClientsRow = ds.Clients.FindByClientID(prow.ClientID)
Dim letterrow As MyDataSet.LettersRow = ds.Letters.FindByID(lisrow.LetterID)
txt.Rtf = letterrow.LetterContents
ls_string = RTF2HTML(txt.Rtf)
ls_string = Mid(ls_string, 1, Len(ls_string) - 176)
If ls_string = "" Then Throw New Exception("Rtf To HTML Conversion Failed")
Label1.SuspendLayout()
Label1.Refresh()
Label1.Text = "Sending Email"
If SendEmail(clientrow.Email, ls_string, letterrow.EmailSubject) Then
Try
prow.Emailed = True
adapterEmailJobs.Update(prow)
Catch ex As Exception
End Try
Else
prow.Emailed = False
adapterEmailJobs.Update(prow)
End If
End If
Next prow
Catch ex As Exception
MessageBox.Show(ex.Message, "Email", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
I'm running this two subs using two different Threads.
Public th As New Thread(New ThreadStart(AddressOf StartFirstPrint))
Public th4 As New Thread(New ThreadStart(AddressOf sendFirstEmail))
Here is the code of StartFirstPrint and sendFirstEmail
Public Sub StartFirstPrint()
Do While thCont
Try
Dim frm As New frmPrint()
'frm.MdiParent = Me
frm.StartPrinting()
Catch ex As Exception
End Try
Loop
End Sub
Public Sub sendFirstEmail()
Do While thCont
Try
Dim frmSNDEmail As New frmEmail
frmSNDEmail.SendEmails()
Catch ex As Exception
End Try
Loop
End Sub
the thCont is a public boolean variable that specifies when to shop those threads.
Most Of the time this works very well. But some times it gives errors Like the following image
I don't know why is this occurring. Please help me.