To display a message on screen you’ll have to yield processing cycles to the UI message pump. This will then process any keyboard and mouse events that have been queued, as well as repaint messages that cause the screen to update. As you can imagine, each time you allow the messages to be processed you’ll have to wait a while, thus slowing down your loop even further. Is that still something you wish to pursue?
You won’t need a new solution, but if you repaint the canvas with half the components in an unsolved state they’ll probably all appear orange.
An alternative is to put your entire process into a non-UI thread, let it run with progress callbacks, and update the UI whenever you please. Then, once your process is complete, do you store your results into some sort of local variable and trigger a new solution in which you assign your computed data to the outputs.
But during this time any components which depend on your component will also appear orange, unless you really start to meddle with the expiration logic.