Sorry for the delay, below is the complete code for the form containing
background worker. It stops right after printing 12 lines
plz help.
------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Premium_service_manager.TenderDigestTableAdapters;
using System.Threading;
using System.IO;
using System.Xml;
using System.Data.SqlClient;
namespace Premium_service_manager
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
delegate void SetTextCallBack(String text);
private void SetText(String text)
{
if (this.richTextBox1.InvokeRequired)
{
SetTextCallBack d = new SetTextCallBack(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.richTextBox1.AppendText(text);
}
}
public String ConStr()
{
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
scsb.DataSource = Properties.Settings.Default.SqlServerName;
scsb.UserID = Properties.Settings.Default.SqlServerUserName;
scsb.Password = Properties.Settings.Default.SqlServerPassword;
scsb.InitialCatalog =
Properties.Settings.Default.SqlServerDefaultDatabase;
return scsb.ConnectionString;
}
private void cancelSendingToolStripMenuItem_Click(object sender,
EventArgs e)
{
}
private void tendersPagesFolderToolStripMenuItem_Click(object sender,
EventArgs e)
{
FolderSettings fs = new FolderSettings();
fs.ShowDialog(this);
}
private void sendEmailsToolStripMenuItem_Click(object sender, EventArgs
e)
{
PremiumServices ps = new PremiumServices();
TenderDigest.PremiumServicesDataTable psTable = ps.GetAll();
this.backgroundWorker1.RunWorkerAsync(psTable);
this.cancelSendingToolStripMenuItem.Enabled = true;
this.sendEmailsToolStripMenuItem.Enabled = false;
this.richTextBox1.Text = "";
}
public static String res;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
TenderDigest.PremiumServicesDataTable psTable = e.Argument as
TenderDigest.PremiumServicesDataTable;
BackgroundWorker bw = sender as BackgroundWorker;
if (psTable.Count <= 0)
{
this.AppendText("No premium subscriber entry found.");
this.AppendText("So, aborting ...");
this.AppendText("----------------------------------------------------------------------------------------------------------------------------------");
//bw.ReportProgress(1);
return;
}
else
{
this.AppendText("Premium subscribers found : " +
psTable.Count.ToString());
this.AppendText("Starting process . . .");
this.AppendText("----------------------------------------------------------------------------------------------------------------------------------");
//bw.ReportProgress(1);
}
for (int i = 0; i < psTable.Count; i++)
{
TenderDigest.PremiumServicesRow psRow = psTable
;
this.AppendText("Premium subscriber ID: " +
psRow.PremiumServiceID.ToString());
this.AppendText("User ID: " + psRow.UserID.ToString());
this.AppendText("User Name: \"" + psRow.UserName + "\"");
if (psRow.ServiceType.Equals("Newsletter"))
{
this.ProcessPremiumSeviceEntry(psRow);
}
else
{
this.AppendText("This user has a subscription of type: " +
psRow.ServiceType);
this.AppendText("So, skipping ...");
}
this.AppendText("----------------------------------------------------------------------------------------------------------------------------------");
//bw.ReportProgress(1);
}
this.AppendText("Ending process . . .");
}
private void ProcessPremiumSeviceEntry(TenderDigest.PremiumServicesRow
psRow)
{
PremiumServiceCriterias psc = new PremiumServiceCriterias();
TenderDigest.PremiumServiceCriteriasDataTable pscTable =
psc.GetCriteriasByPremiumServiceID(psRow.PremiumServiceID);
if (pscTable.Count <= 0)
{
this.AppendText("This entry has no criteria defined !!!");
this.AppendText("Please check it out.");
return;
}
else
{
this.AppendText("This entry has criterias: " +
pscTable.Count.ToString());
TenderFormats tf = new TenderFormats();
TenderDigest.FormatsDataTable fdTable = tf.GetByID(psRow.FormatID);
#region Check for the format file
this.AppendText("Tender formats for this entry: " + fdTable[0].Name);
String format_file_path = fdTable[0].FilePath.Replace("~",
Properties.Settings.Default.TemplatesFolder).Replace("/", "\\");
this.AppendText("Format file: " + format_file_path);
this.AppendText("Looking for the format file ...");
if (File.Exists(format_file_path))
{
FileInfo fi = new FileInfo(format_file_path);
this.AppendText("Found format file. File size: " + fi.Length + "
bytes");
}
else
{
this.AppendText("Format file not found !!!");
return;
}
#endregion
#region Check for Tenders pages Dir
String tendersPagesFolder =
Properties.Settings.Default.TendersPagesFolder;
DirectoryInfo pagesDir = new DirectoryInfo(tendersPagesFolder);
if (!pagesDir.Exists)
{
pagesDir.Create();
}
#endregion
#region Create date directory with "selected date" inside pages dir
DirectoryInfo dateDir = new DirectoryInfo(pagesDir.FullName +
this.dateTimePicker1.Value.ToString("dd-MMM-yyyy"));
if (!dateDir.Exists)
{
dateDir.Create();
}
#endregion
#region Create user name dir
DirectoryInfo userNameDir = new DirectoryInfo(dateDir.FullName + "\\"
+ psRow.UserName);
if (!userNameDir.Exists)
userNameDir.Create();
#endregion
String tenderFilePath = userNameDir + "\\" + "tenders" +
psRow.PremiumServiceID.ToString() + ".htm";
if(!File.Exists(tenderFilePath))
{
File.CreateText(tenderFilePath);
}
for (int i = 0; i < pscTable.Count; i++)
{
TenderDigest.PremiumServiceCriteriasRow pscRow = pscTable;
if (pscRow.type == 1)
{
KeywordsList kl = new KeywordsList();
int keyID = -1;
if (Int32.TryParse(pscRow.value, out keyID) && (keyID > 0))
{
this.AppendText("Criteria type: \"Keyword\" with value = \"" +
kl.GetNameByID(Convert.ToInt32(pscRow.value)) + "\"");
this.ProcessKeyWord(keyID, this.dateTimePicker1.Value,
psRow.PremiumServiceID);
}
}
}
}
}
private String ProcessKeyWord(int keyID,DateTime date,int
PremiumServiceID)
{
String conStr =
System.Configuration.ConfigurationManager.ConnectionStrings["tenderdigestConnectionString"].ConnectionString;
if (!String.IsNullOrEmpty(conStr))
{
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection(conStr);
con.Open();
SqlCommand cmd = new
SqlCommand("CompleteTendersForPremiumService_ByKeyword", con);
cmd.CommandTimeout = 60;
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adp = new SqlDataAdapter();
adp.Fill(ds);
if (ds.Tables.Count <= 0)
{
this.AppendText("Dataset returned no tables !!!");
this.AppendText("Aborting . . .");
}
else if (ds.Tables.Count >= 3)
{
#region NO tender found, so get back
if (ds.Tables[0].Rows.Count <= 0)
{
this.AppendText("No tender entry found for this keyword for date: "
+ date.ToString("dd-MMM-yyyy"));
this.AppendText("Aborting . . .");
return "";
}
#endregion
}
}
else
{
this.AppendText("Connection string not found!!!");
this.AppendText("Aborting . . .");
return "";
}
this.AppendText("----------------------------------------------------------------------------------------------------------------------------------");
return "";
}
private void AppendText(String text)
{
this.richTextBox1.AppendText(DateTime.Now.ToString("[dd-MMM-yyyy
hh:mm:ss tt]") + " " + text + "\r\n");
}
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.richTextBox1.AppendText(res);
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
this.cancelSendingToolStripMenuItem.Enabled = false;
this.sendEmailsToolStripMenuItem.Enabled = true;
}
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
String exePath = Application.ExecutablePath;
String exeName = exePath.Substring(exePath.LastIndexOf('\\') +
1,exePath.Length - exePath.LastIndexOf('\\') -1);
String configName = exeName + ".config";
if (File.Exists(configName))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(configName);
XmlNodeList nodes = xmlDoc.GetElementsByTagName("connectionStrings");
}
SqlServerSettings sss = new SqlServerSettings();
sss.ShowDialog(this);
}
}
}
Peter Duniho said:
[...]
Now i want to use the background worker class to use Threading so that
my form remains responsive while doing this heavy work .
A good idea.
Now my problem is, I can not show lines of texts as each entry gets
processed. At some point it just stops. The work finishes but i dont see
any text entry in the text box as i expected.
What have you tried? What made you believe it would work?
Without knowing what code you've written so far, it's really not possible
to advise you regarding how to fix it.
Pete