C# 后台工作者 sql

C# background worker sql

我想加载一个方法,该方法使用 backgroundworker 方法将数字从数据库设置到文本字段...我试了好几天都找不到方法,但还是找不到。当我在 DoWork 方法中调用此方法时,没有任何反应。

这是方法;

        Int32 id = 0;

        string query = "SELECT MAX( CONVERT( SUBSTRING(RefNo, 3) , UNSIGNED INTEGER) ) FROM has.recruitments";
        MySqlConnection conDatabase = new MySqlConnection(constring);
        MySqlCommand cmdda = new MySqlCommand(query, conDatabase);
        MySqlDataReader myReader;

        try
        {
            conDatabase.Open();

            myReader = cmdda.ExecuteReader();

            while (myReader.Read())
            {
                id = myReader.GetInt32(0);
            }


            if (!(Application.OpenForms.OfType<Report>().Any()))
            {
                // MessageBox.Show("Opened");

                int id1 = id + 1;
                String s = "MP0" + id1;

                //  MessageBox.Show(s);
                textBox5.Text = s;
            }

        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
        }

您不能从后台线程更新 GUI。这已经在这里讨论了很多次,实际上不值得一提。

问题是,您(像许多其他人一样)错误地使用了后台工作程序。理想情况下,您在 DoWork 中所做的所有工作都不应依赖于 UI(在您的情况下并非如此)。您应该 return 您在 RunWorkerCompleted 事件中评估的结果。

如果您确实需要从后台工作人员进行超出 "finished x% of the work" 的进度更新,您需要在 UI 线程的上下文中调用这些更新。

在您的情况下,后台工作人员旨在在执行数据库查询时保持 UI 响应。所以你应该做的是:

  1. DoWork中,只执行查询
  2. 来自DoWork,return一个包含查询值或错误信息的结果
  3. 计算结果 RunWorkerCompleted
  4. DoWork
  5. 中删除任何 UI 依赖代码