There are many priors on this and most if not all solutions involve more than a line of code. For my app that starts up many threads and even new instances of the app, I used a message file to get it done. This, for that app was not a problem. That is, I wasn't going to get fancy so a file with the answer was my answer.
No, not at all. I didn't deep dive into MethodInvoker but your question is close enough to a system I wrote in about 2008 using VS2008 C#. While not exactly what you did, it did involve threads and entirely new invocations of the same app. Communication was not that involved so I went with a cheap method. Later I would look into other communication methods but never retrofitted the app since it was working.
I find threading ever so convoluted, but better than employing IPC with my c++ code in some module or other.
It's eating into a lot of the little free time I have to code though. Although I do enjoy tackiling something new to me, If it takes to long to collect info and deal with it, it starts to wind me up.
Dim Adapter As New OleDbDataAdapter
Dim Command As New OleDbCommand
Dim xFrom As String = dtpFrom.Value.ToString.Substring(0, dtpFrom.Value.ToString.IndexOf(" "))
Dim xTo As String = dtpTo.Value.ToString.Substring(0, dtpTo.Value.ToString.IndexOf(" "))
sqlQuery = MainQuery ...