public void AddGeneralTask(GeneralTaskDelegate general_task_delegate)
        {
            lock (general_task_items)
            {
                GeneralTaskItem general_task_item = new GeneralTaskItem();
                general_task_item.description = String.Format("{0}:{1}", general_task_delegate.Target, general_task_delegate.Method.Name);
                general_task_item.method      = general_task_delegate.Method;
                general_task_item.target      = new WeakReference(general_task_delegate.Target);

                general_task_items.Add(general_task_item);
            }
        }
        public void RemoveGeneralTask(GeneralTaskDelegate general_task_delegate)
        {
            lock (general_task_items)
            {
                GeneralTaskItem general_task_item = new GeneralTaskItem();
                general_task_item.description = String.Format("{0}:{1}", general_task_delegate.Target, general_task_delegate.Method.Name);
                general_task_item.method      = general_task_delegate.Method;
                general_task_item.target      = new WeakReference(general_task_delegate.Target);

                general_task_items.Add(general_task_item);

                for (int i = 0; i < general_task_items.Count; ++i)
                {
                    if (general_task_items[i].target == general_task_delegate.Target)
                    {
                        general_task_items.RemoveAt(i);
                        break;
                    }
                }
            }
        }