2013-03-22 90 views
3

是否可以在完成async操作後指定要調用的方法?如何爲IAsyncOperation指定回調方法

平臺:C++的Windows Phone 8

我需要實現異步發送UDP數據包無阻塞的方法。他們有我的方法:

onWriteComplete(int errorCode) 

當操作完成時回調。

這是我已經試過:

res = await asyncWrite(); 
onWriteComplete(res); 

,但沒有運氣。

回答

4

在Windows Phone 8和Windows RT應用程序中,異步操作以類似的方式在所有語言中工作。異步操作返回一個IAsyncOperation結果,您可以使用該結果鏈接一個函數以在操作完成時運行。

在C++中,您可以使用create_tasktask::then函數以類似於C#的方式創建任務並鏈接它們。以Asynchronous Programming in C++ (Windows Store Apps)爲例。

的示例創建從IAsyncOperation結果的任務和日程安排另一項任務時,第一個任務完成後執行:

auto deviceEnumTask = create_task(deviceOp); 

// Call the task’s .then member function, and provide 
// the lambda to be invoked when the async operation completes. 
deviceEnumTask.then([this] (DeviceInformationCollection^ devices) 
{  
    for(int i = 0; i < devices->Size; i++) 
    { 
     DeviceInformation^ di = devices->GetAt(i); 
     // Do something with di...   
    }  
}); // end lambda 
+0

注意,DeviceInformationCollection ^也許應該是任務和使用拉姆達內.get來檢索實際的設備信息收集。如果deviceEnumTask失敗(或拋出異常),那麼對.get的調用將拋出異常,從而允許您捕獲失敗。 – 2013-03-24 20:12:44

相關問題