I have written both a EmpireHub in C#/.NET and beginnings of rework of
WinCE in C#/.NET.
For the purposes of the discussion C# and VB.NET are very similar as
you are using the same .NET library in both cases.
It depends what you are trying to do. If you want to parse xdump and
store the information in a console type application synchronous would
be fine. If you want to have a Windows based program like WinACE I
would recommend an asynchronous model otherwise you can not do
anything like view the map while the xdump is being sumbitted, waiting
for response and parsing the response and storing information.
For a console type application I would start with this.
../empire 1 1 <xdump_request >xdump_output
cons_app <xdump_output
Once you have the cons_app running you can batch it with
../empire 1 1 <xdump_request | cons_app
If you want it self contained you can add synchronous socket code the
cons_app.
Another avenue to consider is working in C and modifying the
empire.exe source for a console application.
If you look in the MSDN you will examples on how to make both
synchronous and asychronous .NET soket examples. Here is an example:
http://msdn2.microsoft.com/en-us/library/fx6588te(VS.71).aspx.
If you are doing a Windows based tools you need learn about delgates
otherwise you will not be able communicate between window thread and
the socket thread as cross threading windows controls does not work.