我在我的智慧結束試圖解決這個問題。需要幫助訪問數據來自回調C#.NET
我有一個類中的功能,例如
public class ReceiveData
{
Dataprovider provider = new DataProvider();
public void ResponseData()
{
foreach(string anItem in TheList)
{
// AllData function is declared in class DataProvider
string result = provider.AllData(anItem);
}
//do something
}
}
這很簡單。但是,如果AllData函數必須進行異步函數調用以獲取數據,我該怎麼辦?
含義,說
public class DataProvider
{
MyServiceClient client = new MyServiceClient();
public string AllData (string myItem)
{
client.FormattedDataCompleted += new EventHandler<FormattedDataCompletedEventArgs>(client_FormattedDataCompleted);
client.FormattedDataAsync(myItem);
}
void client_FormattedDataCompleted(object sender, FormattedDataCompletedEventArgs e)
{
// here's where the response comes back.
}
正如你所看到的,現在我不能簡單地調用ALLDATA功能,並直接找回數據。
那麼,我需要做什麼在ResponseData函數中確保我調用AllItem函數,並從回調中獲取數據。請注意,該函數中有一個循環,所以我需要通過循環發送的所有參數都會得到相應的響應。
我嘗試過的一種方法是使用AutoResetEvent類。
我將此處理程序定義爲 AutoResetEvent handle = new AutoResetHandle(false);
然後我在async調用之後立即添加handle.WaitOne()。並在回調中添加了handle.Set();
但是,應用程序卡在handle.WaitOne()。所以我不明白爲什麼會發生這種情況。
我現在有一個理論上的想法,看看我是否可以在回調中使用事件提升器,並在RecieveData類中使用eventlistener,如果這兩者溝通,我可以獲取數據。但我花了一些時間嘗試瞭解更多關於事件處理程序的知識,但還沒有掌握它。
那麼有沒有人有任何其他的方法,想法?謝謝!
Sooo ...只是想了解...你想阻止請求的異步結果?你不想異步處理你的數據? – 2010-11-16 15:33:15
在球部分,是 – Qgalore 2010-11-16 18:26:49