Revision: 7507
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 27, 2008 23:18 by rengber
Initial Code
int totalLines = 0;
int goodLines = 0;
int badLines = 0;
int colNum = 0;
long bytesProcessed = 0;
long fileSize = 0;
string regEx = string.Empty;
char[] delimiter = null;
StringBuilder sb = new StringBuilder();
StreamReader sr = null;
private void txtParse_Click(object sender, EventArgs e)
{
totalLines = 0;
goodLines = 0;
badLines = 0;
sb = new StringBuilder();
bytesProcessed = 0;
progressBar1.Value = 0;
FileInfo fi = new FileInfo(txtInputFile.Text);
fileSize = fi.Length;
sr = new StreamReader(txtInputFile.Text);
colNum = Convert.ToInt32(txtColNum.Text);
regEx = txtRegex.Text;
delimiter = txtDelimiter.Text.ToCharArray();
timer1.Start();
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while(!sr.EndOfStream)
{
string rawLine = sr.ReadLine();
totalLines++;
bytesProcessed += rawLine.Length;
string[] splitLine = rawLine.Split(delimiter);
if (Regex.IsMatch(splitLine[colNum], regEx))
{
goodLines++;
}
else
{
badLines++;
sb.AppendLine(rawLine);
}
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
txtOutput.Text = "Lines Processed: " + totalLines.ToString() + "
";
txtOutput.Text += "Good Lines: " + goodLines.ToString() + "
";
txtOutput.Text += "Bad Lines: " + badLines.ToString() + "
";
txtOutput.Text += sb.ToString();
timer1.Stop();
progressBar1.Value = 100;
}
private void timer1_Tick(object sender, EventArgs e)
{
double ratio = Convert.ToDouble(bytesProcessed) / Convert.ToDouble(fileSize);
double rawPercent = ratio * 100;
int send = Convert.ToInt32(rawPercent);
progressBar1.Value = send;
}
Initial URL
Initial Description
I didn't like the way ReportProgress events backed up, so I ran a Timer object to update the progress meter instead.
Initial Title
Using a BackgroundWorker Object from a Winform
Initial Tags
Initial Language
C#