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; }