Читать Datatable и сделать цикл в строках async c # - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь реализовать асинхронные методы в моей программе и хочу асинхронно читать каждую строку из таблицы данных.У меня следующая ситуация:

   private void VerificarPermissoes()
    {
        try
        {
            string constring = String.Format("server={0}; user id={1}; password={2}; database={3}; pooling=false", AcessoBancoDados.server, AcessoBancoDados.user, AcessoBancoDados.password, AcessoBancoDados.database);

            MySqlConnection con = new MySqlConnection();
            con.ConnectionString = constring;
            con.Open();

            var query = "SELECT id FROM users";

            MySqlCommand cmd = new MySqlCommand(query, con);
            MySqlDataAdapter da = new MySqlDataAdapter(query, con);

            DataTable dt = new DataTable();

            da.Fill(dt);
            con.Close();

            foreach (DataRow item in dt.Rows)
            {
               Messagebox.Show(item["id"].ToString());
            }
    }

И метод вызова:

private void button1_Click(object sender, EventArgs e)
    {
       VerificarPermissoes()
    }

Кто-нибудь может показать мне асинхронную ситуацию для этого?Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

согласно вашему комментарию вам понадобится что-то вроде моего кода ниже.Если вы используете SqlCommand вместо SqlDataAdapter, у вас уже есть асинхронные методы, и вам не нужно создавать задачу.

(также не смешивайте пользовательский интерфейс и доступ к данным. Храните их отдельно.)

    private async void button1_Click(object sender, EventArgs e)
    {
        await VerificarPermissoes();
    }


    private async Task VerificarPermissoes()
    {
        await Task.Run(() =>
        {
              // put your code from above here.
        }); 
    }
0 голосов
/ 29 сентября 2018

Ну, вы можете сделать это в основном, создав задачи в C #, см. Пример ниже

private void VerificarPermissoes()
    {
        try
        {
            DataTable dt = new DataTable();
            string constring = String.Format("");
            string query = "SELECT id FROM users";

            using (SqlConnection con = new SqlConnection(constring))
            {
                con.Open();

                DbCommand command = con.CreateCommand();
                command.CommandText = query;
                dt.Load(command.ExecuteReader());
            }

            foreach (DataRow item in dt.Rows)
            {
                Task.Factory.StartNew(delegate () { ProcessItem(item["id"].ToString()); });
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void ProcessItem(string item)
    {
        AddControl(myControl, childControl);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        VerificarPermissoes();
    }



    private void AddControl(Control ctrl, Control child)
        {
            if (ctrl.InvokeRequired)
            {
                Action act = delegate () { AddControl(ctrl, child); };
                this.Invoke(act);
            }
            else
            {
                ctrl.Controls.Add(child);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...