예제 #1
0
        public static bool TimersSupported()
        {
            IntPtr timerHandle = CreateWaitableTimer(IntPtr.Zero, true, "Wait Timer 1");
            long   interval    = 0;
            int    retVal      = 0;

            if (timerHandle != IntPtr.Zero)
            {
                TimerCompleteDelegate TimerComplete = new TimerCompleteDelegate(TimerCompleted);
                SetWaitableTimer(timerHandle, ref interval, 0, TimerComplete, IntPtr.Zero, true);
                retVal = Marshal.GetLastWin32Error();
                CancelWaitableTimer(timerHandle);
                try
                {
                    CloseHandle(timerHandle);
                }
                catch (Exception exp)
                {
                }
                timerHandle = IntPtr.Zero;
            }

            //SUCCESS
            if (retVal == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
        public static IntPtr SetWakeAt(DateTime dt)
        {
            TimerCompleteDelegate timerComplete = null;

            // read the manual for SetWaitableTimer to understand how this number is interpreted.
            long   interval = dt.ToFileTimeUtc();
            IntPtr handle   = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");

            SetWaitableTimer(handle, ref interval, 0, timerComplete, IntPtr.Zero, true);
            return(handle);
        }
예제 #3
0
        private IntPtr SetWakeAt(DateTime dt)
        {
            // read the manual for SetWaitableTimer to understand how this number is interpreted.
            // long interval = dt.ToFileTimeUtc();
            TimerCompleteDelegate timerComplete = null;

            // long interval = -100000000L;
            long   interval = dt.ToFileTime();
            IntPtr handle   = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");
            bool   erg      = SetWaitableTimer(handle, ref interval, 0, timerComplete, IntPtr.Zero, true);

            DisplayBallonMessage("Wakeup @: " + dt.ToString(), 10000);
            return(handle);
        }
예제 #4
0
        public static bool CreateTimer()
        {
            DateTime utc      = DateTime.Now.AddMinutes(2);
            long     Interval = utc.ToFileTime();
            TimerCompleteDelegate TimerComplete = new TimerCompleteDelegate(TimerCompleted);
            TimerSetDelegate      TimerSet      = new TimerSetDelegate(TimerIsSet);

            // Creating the timer
            //
            Console.WriteLine("Creating WaitableTimer");
            IntPtr handle = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");
            int    retVal = Marshal.GetLastWin32Error();

            Console.WriteLine("Last Error = " + retVal.ToString());
            if (retVal != 0)
            {
                return(false);
            }

            // Setting up the timer, the long Interval value needs to be negative if
            // you want to set up a delay in milliseconds. ie
            // if Interval = -60000000 the timer will expire in 1 minute. Once expired it runs the
            // TimerComplete delegate
            //
            Console.WriteLine("Setting WaitableTimer");
            SetWaitableTimer(handle, ref Interval, 0, TimerComplete, IntPtr.Zero, true);
            retVal = Marshal.GetLastWin32Error();
            Console.WriteLine("Last Error = " + Marshal.GetLastWin32Error().ToString()); // The error may be 1004 (Invalid flags), this is not critical
            if (retVal != 0 && retVal != 1004)
            {
                return(false);
            }
            Console.WriteLine("Timer set @ " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));

            // Starting a new thread which waits for the WaitableTimer to expire
            //
            Thread t_Wait = new Thread(new ThreadStart(() => WaitTimer(handle)));

            t_Wait.Start();

            // Raising Event Timer Set
            //
            if (OnTimerSet != null)
            {
                OnTimerSet();
            }
            return(true);
        }
예제 #5
0
        /// <summary>
        /// 延迟
        /// </summary>
        /// <param name="time">单位毫秒</param>
        public static bool Sleep(int time)
        {
            TimerCompleteDelegate TimerComplete = new TimerCompleteDelegate(TimerCompleted);

            long Interval = -10 * time * 1000;//占8字节
            //创建计时器
            IntPtr handle = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");

            SetWaitableTimer(handle, ref Interval, 0, TimerComplete, IntPtr.Zero, true);
            //等待消息抵达
            while (MsgWaitForMultipleObjects(1, ref handle, false, -1, 255) != 0)
            {
                //转让权限
                Application.DoEvents();
            }
            return(CloseHandle(handle));
        }
예제 #6
0
 public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref LARGE_INTEGER ft, int lPeriod, TimerCompleteDelegate pfnCompletionRoutine, IntPtr pArgToCompletionRoutine, bool fResume);
예제 #7
0
 private static extern bool SetWaitableTimer(SafeWaitHandle hTimer, [In] ref long pDueTime, int lPeriod, TimerCompleteDelegate pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);