Первый запуск в VS в режиме отладки. Теперь закодируем несколько вопросов:
catch (InvalidProgramException ex)
{
Console.WriteLine(ex.Message);
}
никогда не будет выполнено, потому что исключение является локальным для потока. Если вы создадите исключение в порожденном потоке, другие потоки его не увидят.
throw new InvalidProgramException("Parameter for "+
"thread must be a string");
эта строка вызывает необработанное исключение, потому что в этом потоке никто его не перехватил. необработанное исключение завершится неудачей всего приложения.
String value = (String)o;
if (value == null)
o может быть нулевым, что является допустимым значением для String, и ваш код будет выдавать исключения, если o не является строкой. Вы имели в виду:
String value = o as String;
if (value == null)