public void UnregisterTask(ISmartTask smartTask)
 {
     smartTask.ThreadPoolHost = null;
     smartTask.BeginEvent    -= new TaskRuntimeEventHandler(OnTaskBeginEvent);
     smartTask.CompleteEvent -= new TaskRuntimeEventHandler(OnTaskCompleteEvent);
     smartTask.ErrorEvent    -= new TaskRuntimeEventHandler(OnTaskErrorEvent);
 }
Beispiel #2
0
        override protected TaskControl DoFireTask(ISmartTask task)
        {
            task.Controller = (task.Controller ?? new TaskControl(true, null));
            var threadTask = new Task(() => task.Callback(null));

            threadTask.Start();

            return(task.Controller);
        }
 public void PushTask(ISmartTask task)
 {
     RegisterTask(task);
     if (task != null)
     {
         taskQueue.Enqueue(task);
     }
     DoTaskPlanning();
 }
 public TaskControl FireTask(ISmartTask task)
 {
     try
     {
         return(DoFireTask(task));
     }finally
     {
         Interlocked.Increment(ref busyTaskCount);
     }
 }
        public ISmartTask CreateTask(ISmartTaskContent taskContent)
        {
            Type templateType = typeof(SmartTask <>);

            Type[] tParamTypes   = new Type[] { taskContent.GetType() };
            Type   smartTaskType = templateType.MakeGenericType(tParamTypes);

            object[]   constructorParam = new object[] { taskContent, null };
            ISmartTask smartTask        = (ISmartTask)Activator.CreateInstance(smartTaskType, constructorParam);

            RegisterTask(smartTask);
            //PushTask(task); 需run task.Start()才會開始
            return(smartTask);
        }
 public void RegisterTask(ISmartTask smartTask)
 {
     if (smartTask.ThreadPoolHost == this)
     {
         return;
     }
     if (smartTask.ThreadPoolHost != null)
     {
         smartTask.ThreadPoolHost.UnregisterTask(smartTask);
     }
     smartTask.ThreadPoolHost = this;
     smartTask.BeginEvent    += new TaskRuntimeEventHandler(OnTaskBeginEvent);
     smartTask.CompleteEvent += new TaskRuntimeEventHandler(OnTaskCompleteEvent);
     smartTask.ErrorEvent    += new TaskRuntimeEventHandler(OnTaskErrorEvent);
 }
 override protected TaskControl DoFireTask(ISmartTask task)
 {
     if (task.Controller == null)
     {
         task.Controller = new TaskControl(true, null);
         ThreadPool.QueueUserWorkItem(new WaitCallback(task.Callback), null);
         return(null);
     }
     else
     {
         TaskControl          tc        = task.Controller;
         RegisteredWaitHandle regHandle = ThreadPool.RegisterWaitForSingleObject(tc.OnRunEvent, new WaitOrTimerCallback(task.Callback), null, tc.TimeoutInterval, tc.ExecuteOnlyOnce);
         tc.RegisteredWaitHandle = regHandle;
         return(tc);
     }
 }
 abstract protected TaskControl DoFireTask(ISmartTask task);