C#/WPF

[WPF] Action 비동기 수행하기

kjun.kr 2022. 4. 1. 09:43
728x90
728x170
        #region AsyncAction
        /// <summary>
        /// Action 수행 및 CompleteAction 을 통해 완료시 Action 도 수행가능
        /// </summary>
        /// <param name="action"></param>
        /// <param name="completeAction"></param>
        public static void AsyncAction(Action action, Action completeAction = null)
        {
            System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Run(() =>
            {
                System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, (Action)(() =>
                {
                    action.Invoke();
                }));
            });

            task.GetAwaiter().OnCompleted(() =>
            {
                if (task.Exception != null)
                {
                    throw task.Exception;
                }
                else
                {
                    completeAction?.Invoke();
                }
            });
        }
        #endregion

EventAggerator 에서 Publish 하게 될때 UI 가 갱신되기전에 Publish 가 수행되지 않게 되는데 이때 위 방법을 사용하게되면 Publish 가 바로 전달되어 실행되게 된다.

728x90
그리드형