static void Test(IList<TestDelegate> methods) {
 foreach (TestDelegate method in methods) {
  new Thread(delegate() {method();}).Start();
 }
}
こういう関数を書いてみたんですが、このままではリストの最後の要素しか呼ばれません。
で
 foreach (TestDelegate method in methods) {
  TestDelegate m = method;
  new Thread(delegate() {m();}).Start();
 }
としたところちゃんと全部呼ばれるようになりました。
匿名デリゲートからローカル変数にアクセスする場合デリゲートをnewした時点で
ローカル変数が外部にコピーされると思っていたのですが、
それだと上の方法でも動きそうに思うのですが、なぜ動かないのでしょうか。

そもそもmとmethodは同じスコープの変数なので
同じように振舞うべきのような気がするのですが。