C# 中的 Mysql 循环冻结窗口

问题描述 投票:0回答:2

我有 mysql 循环

using (var conn = new MySqlConnection(connectionString))
{
    try
    {
        conn.Open();
        int count = 1;

        foreach (var value in values)
        {
            MySqlCommand cmd;
            string qu = "INSERT INTO db(val1,val2,val3,val4,val5) VALUES("+value+")";
            cmd = new MySqlCommand(qu, conn);
            cmd.ExecuteNonQuery();
            textBox1.Text = count.ToString();
            count++;
        }

        conn.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.ToString());
    }
}

我的目标是在 textBox1 计数器中显示(循环有 18k+ 行),但是当我开始 foreach 循环时,我的窗口被冻结并且在循环结束之前不显示任何内容,然后在文本框中显示数字,但我想在中显示当前计数实时。

c# mysql foreach counter
2个回答
0
投票

在 .NET 中,您有几个选项,我将在下面简要列出:

  • 直接使用

    Thread
    类及其 API 创建和管理线程,这是“老式”方式

  • 使用 async/await 启用异步代码(你的库需要支持异步操作)

  • 如果你的库不支持异步操作,你总是可以尝试用

    Task.Run

    包装它

你可以在互联网上找到关于每个主题的数十种资源,所以我不打算深入细节。

在你的情况下,我想应该有方法ExecuteNonQueryAsync

关于用户界面——当我们有用户等待的操作时,向用户显示某种进度指示总是一个好主意。


-2
投票

您需要一个线程来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.