void ThreadMain_ExecuteTaskItem(object arg) { ITaskItem task = arg as ITaskItem; try { OnTakkBegin?.Invoke(task, ""); // run current task task.Start(); // notify current task running result OnTaksFinished?.Invoke(task, task.Finished()); _tasks.Dequeue(); // run next task if exist. Start(); } catch (Exception ex) { OnTaksFinished?.Invoke(task, TTaskResult.EFailed); // TODO: notify exception. } }