private void OnBackgroundStart(sCall call, out bool abort)
 {
     abort = false;
     lock (_runningThreads)
     {
         _runningThreads.Add(new NameValuePair(call.type.FullName + "." + call.Method.Name, Thread.CurrentThread));
     }
 }
 private void OnBackgroundEnd(sCall call, double milliseconds,Exception error,bool timedOut)
 {
     lock(_runningThreads){
         for(int x=0;x<_runningThreads.Count;x++){
             if (((Thread)_runningThreads[x].Value).ManagedThreadId==Thread.CurrentThread.ManagedThreadId){
                 _runningThreads.RemoveAt(x);
                 break;
             }
         }
     }
 }
 public BackgroundOperationRun(sCall call,DateTime start,long id)
 {
     _timer = null;
     _call = call;
     _id = id;
     _start = start;
     _runner = new Thread(new ParameterizedThreadStart(_Start));
     _runner.IsBackground = true;
 }