Никогда, из-за ошибки времени компиляции, которую вы получите из-за отсутствия класса System.Timer
в BCL.Предполагая, что вы хотите System.Threading.Timer , тогда замыкание будет связано / захвачено в тот момент, когда вызывается этот конструктор, т.е. метод определен.Если вы хотите связать его при выполнении метода, вам потребуется еще одна перегрузка конструктора и передать состояние.
var t = new System.Threading.Timer(a =>
{
var foo = a as FooBar;
}, Messages.SelectedItem, -1, -1);
Теперь при выполнении обратного вызова будет использоваться значение Messages.SelectedItem
вмомент выполнения этого обратного вызова.