class CloseWindwowCallbackParameter
{
public IRegion theRegion { get; set; }
public Window windowToClose { get; set; }
}
private void closeWindowinThread(object parameters)
{
CloseWindwowCallbackParameter arguments = parameters as CloseWindwowCallbackParameter;
IRegion region = arguments.theRegion;
Window window = arguments.windowToClose;
window.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal, new Action(delegate()
{
region.Remove(window.Content);
}));
}
private void window_Closed(object sender, EventArgs e)
{
Window window = sender as Window;
IRegion region = _regionWeakReference.Target as IRegion;
if (window != null && region != null)
if (region.Views.Contains(window.Content))
{
WaitCallback callback = new WaitCallback(closeWindowinThread);
ThreadPool.QueueUserWorkItem(callback, new CloseWindwowCallbackParameter
{theRegion = region, windowToClose = window });
}
}