Optimize Implementation - Wait for all threads using LINQ
It's better to use new asynchronous API since it provides more features for combining asynchronous tasks. 

Ideally Mainboard, CentralProcessingUnit and DeviceService should expose asynchronous API if a certain operation is not trivial, so (as you mentioned in comments you wrote them) I would implement asynchronous API for them first, e.g.:

public class Mainboard
{
    public Task&lt;string&gt; GetInformationAsync()
    {
        //TODO: extract long-term operation into Task. Try not to span extra threads here
    }
}


Then your method would look like:

Task.WaitAll(
    new Mainboard().GetInformationAsync().ContinueWith(task =&gt; c.Mainboard = task.Result),
    new CentralProcessingUnit().GetInformationAsync().ContinueWith(task =&gt; c.ProcessorList = task.Result),
    DeviceService.ScanServicesAsync());


If you decide not to implement async API the code can look like:

var c = new Computer();

Task.WaitAll(
    Task.Factory.StartNew(() =&gt; c.Mainboard = new Mainboard().GetInformation()),
    Task.Factory.StartNew(() =&gt; c.ProcessorList = new CentralProcessingUnit().GetInformation()),
    Task.Factory.StartNew(() =&gt; DeviceService.ScanServices()));