public void Show(Exception ex)
        {
            lock (SyncRoot)
            {
                try
                {
                    Setup();

                    var inner = ex.StripTargetInvocationExceptions();
                    Logging.Client.Error("Unhandled Exception", inner);
                    if (inner is InvalidZetboxGeneratedVersionException)
                    {
                        _vmf.ShowMessage(
                            ExceptionReporterViewModelResources.InvalidZetboxGeneratedVersionException_Message,
                            ExceptionReporterViewModelResources.InvalidZetboxGeneratedVersionException_Title
                        );
                    }
                    else if (inner is ZetboxServerIOException)
                    {
                        _vmf.ShowMessage(
                            string.Format(ExceptionReporterViewModelResources.CommunicationError_MessageFormat, inner.Message),
                            ExceptionReporterViewModelResources.CommunicationError_Title
                        );
                    }
                    else if (_uiIsInitialized)
                    {
                        var screenShot = _screenshot.GetScreenshot();
                        if (_mdl == null)
                        {
                            _mdl = _vmf.CreateViewModel<ExceptionReporterViewModel.Factory>().Invoke(_ctx, null);
                            _mdl.AddException(ex, screenShot);
                            _vmf.ShowDialog(_mdl);
                        }
                        else if (_mdl.Show == false)
                        {
                            _mdl.AddException(ex, screenShot);
                            _vmf.ShowDialog(_mdl);
                        }
                        else
                        {
                            _mdl.AddException(ex, screenShot);
                        }
                    }
                    else
                    {
                        _vmf.ShowMessage(ex.ToString(), "Unexpected Error");
                    }
                }
                catch (Exception ex2)
                {
                    // uh oh!
                    Logging.Client.Error("Error while handling unhandled Exception", ex2);
                    _vmf.ShowMessage(ex.ToString(), "Unexpected Error");
                }
            }
        }