How this works
The strategy consists of launching the pop-up dialog in new thread. To do that, a Launch Dialog subsequence contains an action step that will execute the Show Modal Dialog Action step, which loads the GUI and brings it to front. The code module for this step requires the following inputs:
- Sequence Context (e.g., ThisContext) - We use this to access the TestStand API and read the variables.
- The lookup string of the variable you want to monitor (e.g., "FileGlobals.MyVar")
- The lookup string of a boolean FileGlobal we're going to use to stop the pop-up (e.g., "FileGlobals.Stop")
- (Optional) A poll interval in (ms)
This is what it looks like if you usec a LabVIEW module:

This is what it looks like if you used a Python module:

What is happening in the MainSequence?
This is the code in the MainSequence:

- In the Setup group, the Launch Dialog sequence call is set to run the sequence in a new thread.
- This will make the pop-up show up on screen
- In The Main group, the test code runs and updates the variable.
- This makes the FileGlobal variable update on the pop-up dialog.
- In the Cleanup group, the FileGlobals.Stop variable is set to True.
- This makes the pop-up close.
The diagram below represents the execution the different threads of this example:
The Code Module Implementation
Regardless of the language you're using, the core functionality of the module consists of using the TestStand API to monitor both your variable of interest (e.g., FileGlobals.MyVar) and the stop flag variable (e.g., FileGlobals.Stop). You could also use the TestStand helper VIs, functions, classes, etc to make sure the dialog is modal to Teststand.
Here is what a LabVIEW code module would look like:

In this example VI, we use the timeout of the event structure to time the variable poll, and also to gracefully stop the VI when the panel closes.