Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AsyncCancelEventArgs : CancelEventArgs
- {
- public AsyncCancelEventDeferral Deferral;
- public AsyncCancelEventDeferral GetDeferral()
- {
- Deferral = new AsyncCancelEventDeferral();
- return Deferral;
- }
- }
- public class AsyncCancelEventDeferral : TaskCompletionSource<bool>
- {
- public void Complete()
- {
- SetResult(true);
- }
- }
- public static class AsyncCancelExtensions
- {
- public static async Task<bool> InvokeAsync<T>(this EventHandler<T> @event, object sender, T args) where T : AsyncCancelEventArgs
- {
- if (@event != null)
- {
- @event.DynamicInvoke(new object[] { sender, args });
- if (args.Deferral != null)
- {
- await args.Deferral.Task;
- }
- return args.Cancel;
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement