У меня есть следующий звонок:
ExecutionContext::Run(item->Context, gcnew ContextCallback(item, &WaitQueueItem::Callback), item->State);
где WaitQueueItem
следующее:
ref class WaitQueueItem
{
public:
WaitQueueItem(){}
WaitCallback^ Callback;
Object^ State;
ExecutionContext^ Context;
};
WaitCallback
определяется как public delegate void WaitCallback(Object^ state)
в пространстве имен System::Threading
.
Компиляция выдает следующую ошибку:
ошибка C2843:
'Foo :: Bar :: Data :: ConistingClass :: WaitQueueItem :: Callback': невозможно
взять адрес нестатического члена данных или метод управляемого
тип
Если я предоставлю функцию с той же сигнатурой, что и у делегата WaitCallback
, она скомпилируется. Копаясь с dotPeek, я вижу, что тот же код при написании на C #
ExecutionContext.Run(item.Context, new ContextCallback(item.Callback), item.State);
выглядит так:
ExecutionContext.Run(item.Context, new ContextCallback(item.Callback.Invoke), item.State);
Есть ли способ передать делегат без необходимости писать функцию-обертку?
Заранее спасибо