public static Task Dispatch(this SynchronizationContext context, Action action, bool asynchronous = true) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (action == null) { throw new ArgumentNullException(nameof(action)); } var tcs = new TaskCompletionSource <object>(); if (asynchronous) { context.Post(_ => tcs.Run(action), null); } else { context.Send(_ => tcs.Run(action), null); } return(tcs.Task); }
public static Task RunInNewThread(Action action, string threadName = null, ThreadPriority priority = ThreadPriority.Normal, ApartmentState apartmentState = ApartmentState.STA, CultureInfo culture = null, CultureInfo uiCulture = null) { if (action == null) throw new ArgumentNullException(nameof(action)); var tcs = new TaskCompletionSource<object>(); var thread = new Thread(() => tcs.Run(action)) { Name = threadName, Priority = priority, CurrentCulture = culture ?? CultureInfo.CurrentCulture, CurrentUICulture = uiCulture ?? CultureInfo.CurrentUICulture }; thread.SetApartmentState(apartmentState); thread.Start(); return tcs.Task; }
public static Task RunInNewThread(Action action, string threadName = null, ThreadPriority priority = ThreadPriority.Normal, ApartmentState apartmentState = ApartmentState.STA, CultureInfo culture = null, CultureInfo uiCulture = null) { if (action == null) { throw new ArgumentNullException(nameof(action)); } var tcs = new TaskCompletionSource <object>(); var thread = new Thread(() => tcs.Run(action)) { Name = threadName, Priority = priority, CurrentCulture = culture ?? CultureInfo.CurrentCulture, CurrentUICulture = uiCulture ?? CultureInfo.CurrentUICulture }; thread.SetApartmentState(apartmentState); thread.Start(); return(tcs.Task); }