User interface 读取文件时用文件名更新标签

User interface 读取文件时用文件名更新标签,user-interface,label,filenames,User Interface,Label,Filenames,我用c设计了一个查询执行器,它允许您选择多个文件。并在从列表中选择的多个数据库上运行这些查询。 因为这个过程有时需要很长时间,我想向用户提供一些信息。在我的代码中,我首先遍历每个数据库,对于每个数据库,我遍历所有文件。Sql和我执行它们。 在我的表单中,我有两个标签,我想显示当前数据库,在另一个标签中,显示正在运行的文件。 这已经完成了,问题是标签没有更新,表单被冻结,我知道我必须使用线程,但不是如何使用。 这是我的密码: for (int i = 0; i < listBox1.Chec

我用c设计了一个查询执行器,它允许您选择多个文件。并在从列表中选择的多个数据库上运行这些查询。 因为这个过程有时需要很长时间,我想向用户提供一些信息。在我的代码中,我首先遍历每个数据库,对于每个数据库,我遍历所有文件。Sql和我执行它们。 在我的表单中,我有两个标签,我想显示当前数据库,在另一个标签中,显示正在运行的文件。 这已经完成了,问题是标签没有更新,表单被冻结,我知道我必须使用线程,但不是如何使用。 这是我的密码:

for (int i = 0; i < listBox1.CheckedItems.Count; i++)
            {
                String bd = listBox1.CheckedItems[i].ToString();

                this.textBD.Text = bd; //UPDATE CURRENT DATABASE LABEL

                bd = bd.Replace("CL25DEMAYO.", "");

                string ConnStrng = "Data Source=CL25DEMAYO;Initial Catalog=" + bd + "; User Id=sa;Password=190205;";

                try
                {
                    this.SqlConn = new SqlConnection(ConnStrng);
                    this.SqlConn.Open();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }



                for (int e = 0; e < listBoxArchivos.Items.Count; e++)
                {
                    String archi = listBoxArchivos.Items[e].ToString();

                    this.textScript.Text = archi; //UPDATE CURRENT FILE LABEL

                    FileInfo file = new FileInfo(archi);
                    string script = file.OpenText().ReadToEnd();

                    SqlCommand command = new SqlCommand(script, SqlConn);

                    command.ExecuteNonQuery();
                }

                SqlConn.Close();
            }

如果有人能帮助我,我将不胜感激。

最后,我使用BackgroundWorker解决了这个问题,并通过方法invoke更新了标签