2011-01-21 2 views
8

У меня есть делегат события, который определяется следующим образом:Что должно быть передано для параметра @object BeginInvoke?

public delegate void CallbackDelegate(Data data); 
public event CallbackDelegate OnDataComplete; 

Я поднимаю событие асинхронно:

// Raise the OnDataComplete event 
OnDataComplete.BeginInvoke(new Data(), null, null); 

Впоследствии подпись BeginInvoke выглядит следующим образом:

IAsyncResult CallbackDelegate.BeginInvoke(Data data, AsyncCallback callback, object @object) 

В большинство примеров, которые я видел, BeginInvoke вызывается с параметром @object: null, но я не могу найти документацию, которая объясняет, какова цель этого параметра.

В чем же цель этого параметра? Для чего мы можем его использовать?

ответ

8

Это то, что вы можете передать любую соответствующую информацию из вашего метода в обратный вызов. Поскольку C# имеет лямбда-выражения, и поскольку делегаты могут иметь состояние, иногда это бесполезно, и вы можете просто передать null. Но он немного похож на Control.Tag, и он позволяет вам предоставлять информацию обратному сообщению, которая может оказаться удобной.


Update:

Происхождение почему она существует даже восходит к языкам, которые имели только указатели на функции, без закрытия. (Возможно, вы захотите найти слово «закрытие» ... Я не могу объяснить это очень кратко.) В C есть только указатели на функции, а не делегаты; следовательно, указатели на функции не могут содержать состояние. Поэтому всякий раз, когда вы предоставляли обратный вызов, вызываемый вызывал вас, передавая дополнительный указатель для вас, чтобы вы могли передавать данные в ваш обратный вызов, который может потребоваться. В .NET они менее необходимы (потому что делегаты имеют Target объектов и могут удерживать состояние), но иногда они удобны и откуда они берутся.

+1

+1 Отмечено, что это относится к 'Control.Tag'. – Tergiver

8

Вы можете предоставить все, что хотите. В методе AsyncResult вы можете получить это значение с помощью IAsyncResult.AsyncState. Это для вашего использования.

Смежные вопросы