/// <summary> /// Creates the a talk window form and show it. Restores talk window /// contents if configuredto do so. Raises an event indicating the /// talk window was created. Window creation is done in a separate /// thread with its own message loop /// </summary> private void createAndShowTalkWindow() { #if TALKWINDOW_DISPATCHER_THREAD var viewerThread = new Thread(delegate() { if (!_inTalkWindowCreationThread) { _inTalkWindowCreationThread = true; // Create our context, and install it: SynchronizationContext.SetSynchronizationContext( new System.Windows.Threading.DispatcherSynchronizationContext( System.Windows.Threading.Dispatcher.CurrentDispatcher)); #endif IsTalkWindowActive = true; CreateTalkWindow(); showGlass(); Windows.SetTopMost(_talkWindowForm); Form form = null; if (PanelManager.Instance.GetCurrentForm() != null) { form = PanelManager.Instance.GetCurrentForm() as Form; } if (form != null) { SetTalkWindowPosition(PanelManager.Instance.GetCurrentForm() as Form); } var talkWindowAgent = Context.AppAgentMgr.GetAgentByName("TalkWindow Agent"); Log.IsNull("Talkwindowagent", talkWindowAgent); if (talkWindowAgent != null) { Context.AppAgentMgr.AddAgent(_talkWindowForm.Handle, talkWindowAgent); Log.Debug("Added talkwindowagent"); } Windows.ShowForm(_talkWindowForm); Windows.ActivateForm(_talkWindowForm); AuditLog.Audit(new AuditEventTalkWindow("show")); if (CoreGlobals.AppPreferences.RetainTalkWindowContentsOnHide) { _talkWindow.TalkWindowText = _talkWindowText; } if (EvtTalkWindowCreated != null) { EvtTalkWindowCreated(this, new TalkWindowCreatedEventArgs(_talkWindowForm)); } #if TALKWINDOW_DISPATCHER_THREAD System.Windows.Threading.Dispatcher.Run(); Log.Debug("Exited DISPATCHER.RUN"); _inTalkWindowCreationThread = false; } }); viewerThread.SetApartmentState(ApartmentState.STA); Log.Debug("Starting thread, _inTalkWindowCreationThread is : " + _inTalkWindowCreationThread); viewerThread.Start(); #endif }