Example #1
0
        // Test task
        static async Task TestAsync(CancellationToken token)
        {
            using (var awaiter = new Awaiter())
            {
                WaitOrTimerCallbackProc callback = (a, b) =>
                                                   awaiter.Continue();

                IntPtr timerHandle;
                if (!CreateTimerQueueTimer(out timerHandle,
                                           IntPtr.Zero,
                                           callback,
                                           IntPtr.Zero, 500, 500, 0))
                {
                    throw new System.ComponentModel.Win32Exception(
                              Marshal.GetLastWin32Error());
                }

                try
                {
                    var i = 0;
                    while (true)
                    {
                        token.ThrowIfCancellationRequested();
                        await awaiter;
                        Console.WriteLine("tick: " + i++);
                    }
                }
                finally
                {
                    DeleteTimerQueueTimer(IntPtr.Zero, timerHandle, IntPtr.Zero);
                }
            }
        }
        static async Task TestAsync()
        {
            var tcs = new TaskCompletionSource <bool>();

            WaitOrTimerCallbackProc callback = (a, b) =>
                                               tcs.TrySetResult(true);

            //var gch = GCHandle.Alloc(tcs);
            try
            {
                IntPtr timerHandle;
                if (!CreateTimerQueueTimer(out timerHandle,
                                           IntPtr.Zero,
                                           callback,
                                           IntPtr.Zero, 2000, 0, 0))
                {
                    throw new System.ComponentModel.Win32Exception(
                              Marshal.GetLastWin32Error());
                }

                await tcs.Task;
            }
            finally
            {
                //gch.Free();

                GC.KeepAlive(callback);
            }
        }
Example #3
0
 public static extern bool CreateTimerQueueTimer(out IntPtr phNewTimer,
                                                 IntPtr TimerQueue, WaitOrTimerCallbackProc Callback, IntPtr Parameter,
                                                 uint DueTime, uint Period, UIntPtr Flags);