Appendix U Parallel Programming

This appendix summarizes C# parallel programming techniques.

Interacting with the User Interface

Code can directly interact with user interface elements if the code is running inside the thread that created those elements. For example, code executing in a separate thread cannot safely change the text displayed in a TextBox or Label.

To interact with the UI controls, a thread should follow these steps.

  1. Check the InvokeRequired property for a control that was created in the UI thread.
  2. If InvokeRequired is true, the thread should call the control’s Invoke method, passing it a delegate.
  3. The delegate executes on the control’s thread. Because it is running in the control’s thread, the delegate can safely interact with the control.


Parallel LINQ (PLINQ pronounced “plink”) allows a program to execute LINQ queries across multiple processors or cores in a multi-core system. Simply add a call to the AsParallel extension method to the enumerable object from which the query selects data.

The following code uses a PLINQ query to select the even numbers in the array numbers. The call to AsParallel is highlighted in bold.

var evens =
    from int number in numbers.AsParallel()
    where number % 2 == 0
    select number;

foreach (int number in evens) Console.WriteLine(number);

This code composes the query and includes the call to AsParallel. It then loops through the query’s results and displays them.


The BackgroundWorker component provides a relatively ...

Get C# 5.0 Programmer's Reference now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.