У меня есть wcf, который получает информацию из базы данных.
У меня также есть клиентское приложение Silverlight, которое ссылается на этот сервис и использует его для извлечения данных.
public void init(ref Cluster cluster)
{
_SelectedCluster = cluster;
MyEntities svc = new MyEntities(new Uri("http://localhost:49672/MyDataService.svc/"));
docs = new DataServiceCollection<EC_Documents>();
var query = from c in svc.EC_Documents
where c.clusterID == _SelectedNode.ID
orderby c.clusterID
select c;
docs.LoadCompleted += docs_LoadCompleted;
docs.LoadAsync(query);
}
private void docs_LoadCompleted(object sender, LoadCompletedEventArgs e)
{
if (e.Error == null)
{
if (docs.Continuation != null)
{
docs.LoadNextPartialSetAsync();
}
else
{
_SelectedCluster.Value = docs.Count;
}
}
}
Поскольку вызов асинхронный, мне пришлось сделать документы членом класса и проверить их количество в методе docs_LoadCompleted.
У меня также есть _SelectedCluster, который является объектом типа Cluster в качестве члена класса, который содержит текущий объект кластера в итерации.
У меня проблема с назначением результата выбранному в данный момент узлу _SelectedCluster.Value member.
Поскольку вызов асинхронный, я не могу выполнить итерацию по всем моим объектам кластера и назначить результат синхронно. Если я это сделаю, назначение всегда будет на последнем кластере в итерации.
Есть предложения?