/// <summary> /// This is the method which launches the WPF window in a separate thread, and injects any methods that are /// wrapped by ExternalEventHandlers. This can be done in a number of different ways, and /// implementation will differ based on how the WPF is set up. /// </summary> /// <param name="uiapp">The Revit UIApplication within the add-in will operate.</param> public void ShowFormSeparateThread(UIApplication uiapp) { // If we do not have a thread started or has been terminated start a new one if (!(_uiThread is null) && _uiThread.IsAlive) { return; } //EXTERNAL EVENTS WITH ARGUMENTS EventHandlerWithStringArg evStr = new EventHandlerWithStringArg(); EventHandlerWithWpfArg evWpf = new EventHandlerWithWpfArg(); _uiThread = new Thread(() => { SynchronizationContext.SetSynchronizationContext( new DispatcherSynchronizationContext( Dispatcher.CurrentDispatcher)); // The dialog becomes the owner responsible for disposing the objects given to it. _mMyForm = new Ui(uiapp, evStr, evWpf); _mMyForm.Closed += (s, e) => Dispatcher.CurrentDispatcher.InvokeShutdown(); _mMyForm.Show(); Dispatcher.Run(); }); _uiThread.SetApartmentState(ApartmentState.STA); _uiThread.IsBackground = true; _uiThread.Start(); }
/// <summary> /// This is the method which launches the WPF window, and injects any methods that are /// wrapped by ExternalEventHandlers. This can be done in a number of different ways, and /// implementation will differ based on how the WPF is set up. /// </summary> /// <param name="uiapp">The Revit UIApplication within the add-in will operate.</param> public void ShowForm(UIApplication uiapp) { // If we do not have a dialog yet, create and show it if (_mMyForm == null || _mMyForm != null) // || m_MyForm.IsDisposed { //EXTERNAL EVENTS WITH ARGUMENTS EventHandlerWithStringArg evString = new EventHandlerWithStringArg(); EventHandlerWithWpfArg evWpf = new EventHandlerWithWpfArg(); // The dialog becomes the owner responsible for disposing the objects given to it. _mMyForm = new Ui(uiapp, evString, evWpf); _mMyForm.Show(); } }