private void TaskThread(object threadData)
{
try
{
bool flag = false;
threadCtrl.Init();
threadCtrl.RunningThread = true;
SharedObjects.Log.Write(Logging.MsgType.Debug, "RxTxMgrThread", "Starting Thread");
while (!flag)
{
if (!threadCtrl.ExitThread)
{
if (threadCtrl.PauseThread)
{
threadCtrl.IdleThread = true;
SharedObjects.Log.Write(Logging.MsgType.Debug, "RxTxMgrThread", "Pausing Thread");
threadCtrl.EventPause.WaitOne();
threadCtrl.IdleThread = false;
if (threadCtrl.ExitThread)
break;
}
switch (WaitHandle.WaitAny(new WaitHandle[3]
{
(WaitHandle) threadCtrl.EventExit,
(WaitHandle) threadCtrl.EventPause,
(WaitHandle) dataQ.qDataReadyEvent
}))
{
case 0:
flag = true;
if (!threadCtrl.ExitThread)
continue;
else
continue;
case 1:
threadCtrl.EventPause.Reset();
SharedObjects.Log.Write(Logging.MsgType.Debug, "RxTxMgrThread", "Resuming Thread");
continue;
case 2:
dataQ.qDataReadyEvent.Reset();
QueueDataReady();
continue;
default:
flag = true;
continue;
}
}
else
break;
}
}
catch (Exception ex)
{
string msg = "Task Thread Problem.\n" + ex.Message + "\nRxTxMgrThread\n";
msgBox.UserMsgBox(SharedObjects.MainWin, MsgBox.MsgTypes.Error, msg);
}
SharedObjects.Log.Write(Logging.MsgType.Debug, "RxTxMgrThread", "Exiting Thread");
threadCtrl.Exit();
}