Exemple #1
0
        private static IPendingHandler CallPendingBox(string message, string caption, bool canCancel, Window owner)
        {
            var handler  = new PendingHanlderImpl();
            var interact = Settings.InteractOwnerMask;
            var content  = Settings.CancelButtonContent;

            InteractOwnerMask(owner, interact, true);
            if (Settings.CreateOnNewThread)
            {
                PendingBoxXWindow pendingWindow = null;
                var autoReset = new AutoResetEvent(false);
                var ownerRect = GetOwnerRect(owner);

                var threadStart = new ThreadStart(() =>
                {
                    pendingWindow = new PendingBoxXWindow(message, caption, canCancel, ownerRect, Settings);
                    handler.SetWindow(pendingWindow);
                    pendingWindow.OnCancel += (s, e) =>
                    {
                        handler.RaiseCancellingEvent(s, e);
                    };
                    pendingWindow.Closed += delegate
                    {
                        pendingWindow.Dispatcher.InvokeShutdown();
                    };
                    pendingWindow.Show();
                    autoReset.Set();
                    Dispatcher.Run();
                });
                threadStart += () =>
                {
                    InteractOwnerMask(owner, interact, false);
                    handler.RaiseClosedEvent();
                };
                var thread = new Thread(threadStart);
                thread.SetApartmentState(ApartmentState.STA);
                thread.IsBackground = true;
                thread.Start();
                autoReset.WaitOne();
            }
            else
            {
                var pendingWindow = new PendingBoxXWindow(message, caption, canCancel, owner, Settings);
                pendingWindow.OnCancel += (s, e) =>
                {
                    handler.RaiseCancellingEvent(s, e);
                };
                pendingWindow.Closed += delegate
                {
                    handler.RaiseClosedEvent();
                    InteractOwnerMask(owner, interact, false);
                };
                pendingWindow.Show();
                handler.SetWindow(pendingWindow);
            }
            return(handler);
        }
 internal void SetWindow(PendingBoxXWindow window)
 {
     _window = window;
 }