.NET has built-in class handling all your PBKDF2 needs. It is called Rfc2898DeriveBytes and it works as long as you stick to SHA-1 HMAC. If your needs move in direction of SHA-256, you are out of luck.
Therefore I created Pbkdf2 class that takes any HMAC algorithm (e.g. SHA-1, SHA-256 or SHA-512) as input and allows you to derive key based on it.
using (var hmac = new HMACSHA256()) {
var df = new Pbkdf2(hmac, password, salt, iterations);
Console.WriteLine(BitConverter.ToString(df.GetBytes(32)));
}
Full code is available for download.