从另一个类调用异步方法

时间:2019-07-27 14:54:28

标签: c# asynchronous

我有一个异步方法来搜索数据并更新我的列表视图,该异步方法进行HTTP发布并接收JSON数据,在同一类中我可以随时调用该方法,但是我尝试从另一个类调用该方法,并且收到错误:

  

Exceçãogerada:“ System.InvalidOperationException” em   System.Net.Http.dll

这是我的异步方法:

public async System.Threading.Tasks.Task ChecarPedidosAsync()
        {


            using (var client = new HttpClient())
            {
                BindingSource bsDados = new BindingSource();

                String URI = url_app + "/merchantapp/api/" +
                    "GetTodaysOrder?" +
                    "token=" + token +
                    "&user_type=admin" +
                    "&mtid=" + restaurant_id +
                    "&lang=br" +
                    "&api_key=" + api +
                    "&app_version=2.5" +
                    "&merchant_device_id=device_555" +
                    "&device_platform=Android";





                HttpResponseMessage response = await client.GetAsync(URI);
                if (response.IsSuccessStatusCode)
                {
                    //Limpo o listbox
                    listPedidos.Items.Clear();

                    var ProdutoJsonString = await response.Content.ReadAsStringAsync();
                    ProdutoJsonString = ProdutoJsonString.Replace("(", "").Replace(")", "");
                    dynamic dados_msg = JObject.Parse(ProdutoJsonString);
                    //dados_msg = dados_msg.details.data;

                    try
                    {
                        //Verifico se o servidor irá retornar os dados
                        Console.WriteLine(dados_msg);
                        //verifico a quantidade de pedidos
                        int qtd_pedidos = dados_msg.details.total_order;

                        //Altero a mensagem recebido, filtrando os pedidos
                        dados_msg = dados_msg.details.data;
                        Console.Write(dados_msg);
                        //Faço o loop nos pedidos
                        for (int i = 0; i <= qtd_pedidos - 1; i++) {
                            N_Pedido = dados_msg[i].order_id;
                            Cliente = dados_msg[i].customer_name;
                            Hora = dados_msg[i].transaction_time;
                            Valor = dados_msg[i].total_w_tax_prety;
                            Situacao = dados_msg[i].status_raw;


                            //Acerto de status pending (Gerado no mobile)
                            if (Situacao.Equals("pending") || Situacao.Equals("Pending") || Situacao.Equals("pendente"))
                            {

                                Situacao = "Pendente";

                            }
                            else if (Situacao.Equals("accepted") || Situacao.Equals("Accepted")) {
                                Situacao = "Aceito";
                            }
                            else if (Situacao.Equals("decline") || Situacao.Equals("Decline"))
                            {
                                Situacao = "Rejeitado";
                            }

                            //listPedidos.DrawMode = DrawMode.OwnerDrawFixed;
                            //listPedidos.DrawItem += new DrawItemEventHandler(listPedidos_DrawItem);

                            listPedidos.Items.Add("#" + N_Pedido + "-" + Cliente + "-" + Hora + "-\n" + Valor + "-" + Situacao);



                            /*MessageBox.Show("N_Pedido: " + N_Pedido+
                            "\nCliente: "+Cliente+
                            "\nHora: "+Hora+
                            "\nValor: "+Valor+
                            "\nSituacao: "+Situacao);*/

                        }







                    }
                    catch (Exception es)
                    {

                    }


                }
                else
                {

                }
            }    
        }

这是我从另一个类中调用异步方法的代码:

//Atualizo o PDV
                    frmPDV novo = new frmPDV();
                    novo.ChecarPedidosAsync();

1 个答案:

答案 0 :(得分:0)

当我打开异步方法时,我的_load事件表单加载了“ URL,令牌等”设置,当我尝试调用另一个类的异步方法时,这些字符串为空,因此我更改了方法并将其设置为像字符串,效果很好。

frmPDV novo = new frmPDV();
novo.ChecarPedidosAsync(url, token, api);