Advertisement
FrayxRulez

AsyncCancelEventArgs

Sep 2nd, 2014
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.99 KB | None | 0 0
  1. public class AsyncCancelEventArgs : CancelEventArgs
  2.     {
  3.         public AsyncCancelEventDeferral Deferral;
  4.  
  5.         public AsyncCancelEventDeferral GetDeferral()
  6.         {
  7.             Deferral = new AsyncCancelEventDeferral();
  8.  
  9.             return Deferral;
  10.         }
  11.     }
  12.  
  13.     public class AsyncCancelEventDeferral : TaskCompletionSource<bool>
  14.     {
  15.         public void Complete()
  16.         {
  17.             SetResult(true);
  18.         }
  19.     }
  20.  
  21.     public static class AsyncCancelExtensions
  22.     {
  23.         public static async Task<bool> InvokeAsync<T>(this EventHandler<T> @event, object sender, T args) where T : AsyncCancelEventArgs
  24.         {
  25.             if (@event != null)
  26.             {
  27.                 @event.DynamicInvoke(new object[] { sender, args });
  28.  
  29.                 if (args.Deferral != null)
  30.                 {
  31.                     await args.Deferral.Task;
  32.                 }
  33.  
  34.                 return args.Cancel;
  35.             }
  36.  
  37.             return false;
  38.         }
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement