If the program was not .net, I would suggest sending or placing a window message: see PostMessage and RegisterWindowMessage . To get such a message in a .net program, I think you might need PInvoke RegisterWndowMessage and override your WndProc .
Another good opportunity is to share a named mutex.
You have to define what you mean by “real time”: on the one hand, there is nothing in real time on Windows, and on the other hand, when you start to backtrack on it and instead say “almost real time” or “soft” real time, "then many solutions are possible.
source share