Пример #1
0
 public TimeOutModel(int id, int userId, long time, TimeOutDelegate td)
 {
     this.Id              = id;
     this.Time            = time;
     this.timeOutDelegate = td;
     this.userId          = userId;
 }
Пример #2
0
        //添加定时任务 XX时间后执行
        public void AddTimeEvent(long delayTime, int userId, TimeOutDelegate timeOutDelegate)
        {
            Console.WriteLine("add timeout event   " + userId);
            TimeOutModel model = new TimeOutModel(id.Add_Get(), userId, DateTime.Now.Ticks + delayTime, timeOutDelegate);

            idModelDict.TryAdd(model.Id, model);
        }
Пример #3
0
        //添加定时任务 XX:XX:XX执行
        public void AddTimerEvent(DateTime dateTime, int userId, TimeOutDelegate timeOutDelegate)
        {
            long delayTime = dateTime.Ticks - DateTime.Now.Ticks;

            if (delayTime <= 0)
            {
                return;
            }
            AddTimeEvent(delayTime, userId, timeOutDelegate);
        }
Пример #4
0
        /// <summary>
        /// Execute a method with timeout check
        /// </summary>
        /// <typeparam name="T">Target method parameter type</typeparam>
        /// <typeparam name="TR">The result type of execution</typeparam>
        /// <param name="timeoutMethod">Target method</param>
        /// <param name="param">Target method parameter</param>
        /// <param name="result">The result of execution</param>
        /// <param name="timeout">Set timeout length</param>
        /// <returns>Is timeout</returns>
        public static Boolean Execute <T, TR>(
            TimeOutDelegate <T, TR> timeoutMethod, T param, out TR result, TimeSpan timeout)
        {
            var asyncResult = timeoutMethod.BeginInvoke(param, null, null);

            if (!asyncResult.AsyncWaitHandle.WaitOne(timeout, false))
            {
                result = default(TR);
                return(true);
            }
            result = timeoutMethod.EndInvoke(asyncResult);
            return(false);
        }
Пример #5
0
 public void AddACKCheckEvent(ACKDelegate check_delegate,
                              int timeOut       = -1,
                              string timeOutMsg = "",
                              TimeOutDelegate timeout_delegate = null)
 {
     if (timeOut > 0)
     {
         System.Threading.Timer timer = new System.Threading.Timer(
             delegate(object state)
         {
             if (timeOutEvent != null)
             {
                 timeOutEvent.Invoke();
             }
             RemoveACKCheckEvent();
             //mainForm.ShowMessageBox(timeOutMsg);
         }, null, timeOut, System.Threading.Timeout.Infinite);
         ackCheckEvent += delegate() { timer.Dispose(); };
     }
     ackCheckEvent += check_delegate;
     timeOutEvent  += timeout_delegate;
 }
Пример #6
0
 public void RemoveACKCheckEvent()
 {
     ackCheckEvent = null;
     timeOutEvent  = null;
 }