基本上,当我的autocompletetextbox更改文本时,它会从WCF
服务(带照片)更新,问题是:
Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));
任务一启动就没有启动,所以我需要的列表是空的。
private async void tbA_destinatario_TextChanged(object sender, RoutedEventArgs e)
{
await buscaAC();
await fotos();
int i = 0;
foreach (Pessoa temp in listaPessoas)
{
if (listaimgs.Count == 0)
break;
temp.Imagem = listaimgs[i];
i++;
listaPessoas[i] = temp;
}
tbA_destinatario.ItemsSource = listaPessoas;
}
private async Task buscaAC()
{
ServicosLinkedIN.ServicosClient listanomes = new ServicosLinkedIN.ServicosClient();
string query = "select nome,id_user, foto from tbl_conexoes, tbl_users where((tbl_conexoes.id_con2 = @var1 AND id_con1 = id_user) OR (tbl_conexoes.id_con1 = @var1 AND id_con2 = id_user)) AND upper(nome) LIKE upper(@var2) ORDER BY nome LIMIT 0, 5";
List<string> argumentos = new List<string>();
argumentos.Add(Convert.ToString(id));
argumentos.Add("%" + tbA_destinatario.Text + "%");
//listanomes.listautilizadoresAsync(id, tbA_destinatario.Text);
listanomes.queryCompleted += listanomesautocomplete;
Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));
taskA.Start();
await taskA;
}
private async Task fotos()
{
ServicosLinkedIN.ServicosClient dlfotos = new ServicosLinkedIN.ServicosClient();
dlfotos.listadlFotoCompleted += dlfotos_listadlFotoCompleted;
Task taskA = new Task(() => dlfotos.listadlFotoAsync(nomeimgs));
taskA.Start();
await taskA;
}
答案 0 :(得分:0)
我认为你必须等待你在代表中调用的任务。例如:
Task taskA = new Task( async () => await listanomes.queryAsync(argumentos, 2, 3, query));
但我真的没有找到你创建单独任务的原因。你可以使用:
await listanomes.queryAsync(argumentos, 2, 3, query);
而不是创建taskA
,启动它并等待它。
答案 1 :(得分:0)
如果不尝试进一步分析代码,这肯定是个问题:
Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));
你在这里做了点火。当您开始任务时,它将立即完成,而queryAsync
将在后台继续执行。
您应该在不使用Task
构造函数的情况下重写代码。我确信这是可能的。