You have code duplication here (the body of the anonymous task/thread functions). Maybe factor this code out into a function.

A general note: I see why you would want to use conditional compilation, but I would strongly suggest to minimize it as much as possible (ideally, not use it at all).

I would suggest you abstract away all code that needs conditional compilation (into a small number of classes that handle these cases) and move conditional compilation there (just minimize the scope of conditional compilation).

Ideally, though, you should just consider using .NET 3.5 constructs.