Ответ 1
Это скорее требование Windows, чем WPF, и возвращается к исходному дизайну форм и элементов Windows, начиная с .NET.
STAThread относится к "однопоточным квартирам", который относится к модели потоков, используемой текущей (основной) нитью. Используемая модель потоковой передачи определяет, как другие .NET и COM-приложения будут разговаривать с вашим приложением (и, по сути, своими потоками). Однопоточная модель приложения требует, чтобы ни один объект не "жил" в более чем одном потоке STA одновременно, стирается модель потока MTA; и позволяет передавать указатели на данные по квартирам только через маршаллинг-объект.
В основном, с объявлением [STAThread], другие приложения будут знать, что такое политика потоков при отправке данных. Модель STA является наиболее распространенной моделью потоков для потоков/приложений Windows; но иногда вы сталкиваетесь с определенным кодом, который не будет запускаться, если вызван из потока с использованием STA-модели, поскольку он предназначен для отправки/получения данных через границы потоков способами, которые не соответствуют ограничениям STA. Зная заранее, что модель квартиры данного потока позволяет IDE улавливать эти исключения во время компиляции, а не получать неприятные ошибки при нарушении прав при попытке использовать объект через границы потоков во время выполнения.
Вы можете прочитать о потоках STA и MTA из статьи MSDN по адресу: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx
Обратите внимание, что даже обычные приложения .NET(от WPF) требовали декларации [STAThread] на вершине main().