C # Закрытие привязки - PullRequest
3 голосов
/ 31 мая 2011

Учитывая следующее, когда foo привязан?

 System.Timer t = new System.Timer( (a)=>{
    var foo = Messages.SelectedItem as FooBar;
 });

Связан ли он, тогда выполняется анонимный метод или когда метод определен?

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

foo вообще не связан, так как он является внутренним для анонимного метода.Он будет вызывать сообщения. Выбранный элемент.Если сообщения является свойством экземпляра, то привязывается экземпляр «this», который используется для получения сообщений.

4 голосов
/ 31 мая 2011

Никогда, из-за ошибки времени компиляции, которую вы получите из-за отсутствия класса System.Timer в BCL.Предполагая, что вы хотите System.Threading.Timer , тогда замыкание будет связано / захвачено в тот момент, когда вызывается этот конструктор, т.е. метод определен.Если вы хотите связать его при выполнении метода, вам потребуется еще одна перегрузка конструктора и передать состояние.

var t = new System.Threading.Timer(a =>
{
    var foo = a as FooBar;
}, Messages.SelectedItem, -1, -1);

Теперь при выполнении обратного вызова будет использоваться значение Messages.SelectedItem вмомент выполнения этого обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...