/// <summary>
        /// Handles the unloaded event.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected virtual void HandleUnloadedEvent(object sender, EventArgs e)
        {
            if (ElementDispatcher == null)
            {
                return;
            }

            ElementDispatcher.InvokeShutdown();
            RemoveLogicalChild(Host);
            RemoveVisualChild(Host);
            ElementDispatcher = null;
            Element           = null;
        }
        public Task InvokeAsync(DispatcherPriority priority, Action action)
        {
            if (action == null)
            {
                return(Task.CompletedTask);
            }

            if (ElementDispatcher == null || ElementDispatcher.HasShutdownStarted || ElementDispatcher.HasShutdownFinished)
            {
                return(Task.CompletedTask);
            }

            if (Thread.CurrentThread != ElementDispatcher?.Thread)
            {
                return(ElementDispatcher?.BeginInvoke(action, priority).Task);
            }

            action?.Invoke();
            return(Task.CompletedTask);
        }