Вместо того, чтобы удалить просто делают инверсию (создайте новый словарь из старого, содержащего только элементы, Вы интересуетесь), и позвольте сборщику "мусора" заботиться о старом словаре:
var newDictionary = oldDictionary.Where(x => x.Value != foo);
JRTPLIB очень хорош и используется в известных проектах, таких как SightSpeed (и многих других). Довольно хорошо продуманная, очень гибкая лицензия; с ним довольно легко все исправить.
проверить live555 Полезные библиотеки и примеры кода для потоковой передачи материалов из вашего собственного приложения
R