[quoted text, click to view] > Could you post a short but complete program which demonstrates the
> problem?
Hi Jon,
I am just writing the functions I am calling to read files & storing the
Data in to HashTables / Arraylist.
Method 1:
#region setupReaderThreads
/// <summary>
/// Setup the Multi Threaded environment to read the Log files
/// </summary>
private void setupReaderThreads()
{
int fileNameCount = fileNames.Count;
_fileName = new string[_arrayLength];
_logAnalyserBL = new LogAnalyserBL[_arrayLength];
_logAnalyserBLThread = new Thread[_arrayLength];
for(int i=0; i< _arrayLength; i++)
{
//fileNames is an arraylist
_fileName[i] = fileNames[i + _fileCounter].ToString();
if(! File.Exists(_fileName[i]))
{
return;
}
else
{
_logAnalyserBL[i] = new LogAnalyserBL(false);
_logAnalyserBL[i].FileName = _fileName[i];
}
_logAnalyserBLThread[i] = new Thread(new
ThreadStart(_logAnalyserBL[i].DoWork));
_logAnalyserBLThread[i].Name = "Log Reader " + i;
_logAnalyserBLThread[i].Start();
}
}
************************************************
Method 2:
#region SearchTimer_Tick
/// <summary>
/// SearchTimer_Tick
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SearchTimer_Tick(object sender, System.EventArgs e)
{
try
{
SearchTimer.Enabled = false;
//
// Setting up the Multiple Threades to read the log files
//
if (_state == 0)
{
setupReaderThreads();
_state = 1;
}
//
// Checking if the file Reading is finished or it is still going on
//
else if (_state == 1)
{
Cursor = Cursors.WaitCursor;
bool flag = false;
StatusLabel.Text = _logAnalyserBL[0].statusBar;
for(int i=0; i< _arrayLength; i++)
{
if(!_logAnalyserBL[i].isRunning)
flag = true;
else
{
flag = false;
break;
}
}
if(flag)
_state = 2;
}
//
// Adding all the Logfiles Hash Table objects into the arraylist to
prepare the Result Nodes
//
else if (_state == 2)
{
StatusLabel.Text = string.Format("Preparing Results...", _logs.Count);
// Adding all the log file hashtable objects into the
Arraylist "_logs"
for(int i=0; i< _arrayLength; i++)
{
foreach (LogEntryNode n in _logAnalyserBL[i].results)
{
_logs.Add(n);
}
_logAnalyserBL[i] = null;
}
//Logic for Increment the counter to read 12 files at a time
if(_fileCounter < fileNames.Count - fileNames.Count%12)
{
_fileCounter += 12;
_state = 0;
if( _fileCounter == fileNames.Count - fileNames.Count%12)
{
_arrayLength = fileNames.Count%12;
if(_fileCounter == fileNames.Count)
{
_state = 3;
}
}
else if(_fileCounter == fileNames.Count)
{
_state = 3;
}
}
else
_state = 3;
}
//
// Reading the Log arraylist & Creating the corresponding Hashtables
//
else if (_state == 3)
{
_logMatcher = new LogMatcher();
_logMatcher.logs = _logs;
ThreadStart threadStart = new ThreadStart(_logMatcher.DoWork);
Thread logAnalysisThread = new Thread(threadStart);
logAnalysisThread.Name = "Log Analysis";
logAnalysisThread.Start();
_state = 4;
}
//
// Checking the thread is running or not
//
else if (_state == 4)
{
if (!_logMatcher.isRunning)
_state = 5;
else
StatusLabel.Text = _logMatcher.status;
}
//
// Updating the Status
//
else if (_state == 5)
{
this.StatusLabel.Text = "Converting to TreeView...";
_state = 6;
}
//
// Converting the resultant nodes into TreeView form
//
else if (_state == 6)
{
this.StatusLabel.Text = "Converting to TreeView...";
MetaDataTreeView.BeginUpdate();
MetaDataTreeView.Nodes.Add(new TreeNode("QUERY Nodes"));
MetaDataTreeView.Nodes.Add(new TreeNode("SAVE Nodes"));
int userCount = 1;
foreach (string key in _logMatcher.orderedResults)
{
ArrayList logEntryArrayList = (ArrayList) _logMatcher.results[key];
TreeNode tNode = null;
string startTime = string.Empty;
string endTime = string.Empty;
string timeTaken = string.Empty;
if (_logMatcher.methods.ContainsKey(key))
{
LogEntryNode logEntryNode = (LogEntryNode) _logMatcher.methods[key];
startTime = logEntryNode.GetVal("Time");
tNode = new TreeNode(string.Format("{0} {1}", logEntryNode.themethod,
logEntryNode.GetVal("Time")));
// get the user
string user = logEntryNode.GetVal("Original User");
if (user.Length == 0)
{
string refString = logEntryNode.GetVal("Ref");
user = refString.Substring(0, refString.IndexOf("-"));
}
//user += " - Ping";
if (!_users.ContainsKey(user))
_users.Add(user, new LogUserDetails(user, userCount++));
LogUserDetails logUserDetails = (LogUserDetails) _users[user];
tNode.BackColor = logUserDetails.color;
logUserDetails.count++;
}
else
{
tNode = new TreeNode( "Unknown" );
tNode.BackColor = Color.LightCoral;
}
TreeNode keyNode = new
TreeNode(((LogEntryNode)logEntryArrayList[0]).key);
tNode.Nodes.Add(keyNode);
foreach (LogEntryNode n in logEntryArrayList)
{
tNode.Nodes.Add(n);
if( n.Text.IndexOf(": Completed") > 0)
{
endTime = n.GetVal("Time");
if( startTime != string.Empty && endTime != string.Empty )
{
timeTaken = Convert.ToString( Convert.ToDateTime(endTime) -
Convert.ToDateTime(startTime));
}
}
}
TreeNode timeTakenNode = new TreeNode("Time Taken: " + timeTaken );
timeTakenNode.BackColor = Color.Red;
timeTakenNode.ForeColor = Color.White;
tNode.Nodes.Add(timeTakenNode);
// Distinguishing the Log entries on the Basis of the query & Save
if(tNode.Text.IndexOf("Query") == 0)
{
MetaDataTreeView.Nodes[0].Nodes.Add(tNode);
}
else
{
MetaDataTreeView.Nodes[1].Nodes.Add(tNode);
}
}
MetaDataTreeView.EndUpdate();
_logMatcherHash.Clear();
_logMatcherHash.Add("SEARCH_LOG", _logMatcher);