来自托管对象的事件未得到处理

Events from managed object not getting handled

你好,我是 C++ 的新手,正在尝试处理由托管 class ServerApi::Request 引发的事件 托管 class 是一个 COM 接口,我使用 "add reference" 工具将其导入到我的 visual studio 项目中 select ServerApi.dll 文件。所有方法似乎都按预期工作,但事件处理程序 onDataReady() 从未执行。这是我的代码:

//Event receiver
ref class EventReceiver {
public:

    void OnDataReady() {

        cout << "dataReadyHandler called" << endl;

    }

    void AddHandlers(ServerApi::Request^ request) {

        request->DataReady += gcnew DataReadyDelegate(this, &EventReceiver::OnDataReady);
    }

    void RemoveHandlers(ServerApi::Request^ request) {

        request->DataReady -= gcnew DataReadyDelegate(this, &EventReceiver::OnDataReady);

    }

};

void executeEventRequest() {

    ServerApi::RequestManager^ requestManager = gcnew ServerApi::RequestManager();

    ServerApi::Request^ request = requestManager->CreateMethod("...");

    EventReceiver^ eventReceiver = gcnew EventReceiver();
    eventReceiver->AddHandlers(request);
    request->Execute();
    eventReceiver->RemoveHandlers(request);

}

request 对象在调用 Execute() 方法后引发 DataReady 事件。我知道数据几乎是通过轮询立即准备就绪的。我错过了什么?

第一次编辑

这是我最初在 request->Execute() 被调用后等待的方式:

    EventReceiver^ eventReceiver = gcnew EventReceiver();
    eventReceiver->AddHandlers(request);
    request->Execute();
    clock_t beginTime = clock();

    // wait for 2 seconds
    while(clock() < beginTime + 2000) {

        // do nothing

    }

    eventReceiver->RemoveHandlers(request);

Execute 方法控制没有阻塞,立即返回。

我设法通过在 executeEventRequest() 方法中使用 System::Windows::Forms::Application::DoEvents() 来处理 DataReady 事件:

EventReceiver^ eventReceiver = gcnew EventReceiver();
eventReceiver->AddHandlers(request);
request->Execute();
clock_t beginTime = clock();

// wait for 2 seconds
while(clock() < beginTime + 2000) {

    System::Windows:Forms::Application::DoEvents() // this line enabled events handling

}

eventReceiver->RemoveHandlers(request);