Example #1
0
        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);
        }
Example #2
0
		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;
		}	
Example #3
0
        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);
        }