The answer occurs in a separate thread. Winforms are not multi-threaded, so you have to send the call to the same thread as the form.
You can do this using the inner outline of the message in the window. Fortunately, .NET provides a way to do this. You can use the Invoke or BeginInvoke methods for this. The first blocks the current thread until the user interface thread completes the called method. Later does this asynchronously. If there is no cleaning, you can use the latter to โshoot and forgetโ
To do this, in any case, you need to create a method that BeginInvoke calls, and you need the delegate to point to this method.
For more information, see Control.Invoke and Control.BeginInvoke on MSDN.
Here is an example at this link: https://msdn.microsoft.com/en-us/library/zyzhdc6b(v=vs.110).aspx
Update: when I look at my profile because I forgot that I have an account here, I noticed this, and I have to add: everything that was in the past 3.5, or when they significantly changed the asynchronous stream model, here is from my wheelhouse. I am professional, and while I still love the craft, I do not follow every progress. I can tell you that this should work in all versions of .NET, but it may not be the absolute peak of performance 4.0 or higher, or in Mono / Winforms emulation if it is still around. On the bright side, any hit will usually not be bad outside of server applications, and even inside if threadpool does its job. Therefore, in most cases, do not focus on optimization efforts, and most likely they will work on the "stripped down" platforms that you see, for example, on C # mobile devices, although I had to be sure and most of them do not start winforms, but some spin message loops, and this also works. In fact, this is not the "best answer" for the latest platforms in each last case. But it can be more portable in the right case. If this helps one person avoid a design error, then it is worth the time to write it. =)