Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从SQl读取时不写入rich textbox_C#_Sql_Richtextbox - Fatal编程技术网

C#从SQl读取时不写入rich textbox

C#从SQl读取时不写入rich textbox,c#,sql,richtextbox,C#,Sql,Richtextbox,我尝试使用以下代码清除richtextbox,从sql数据库收集数据,并通过richtextbox(rtbData)显示程序正在检索信息: public void readInData() { rtbData.Clear(); rtbData.AppendText("...Retrieving Data From Database..."); reader = dataCommand.ExecuteReader();

我尝试使用以下代码清除richtextbox,从sql数据库收集数据,并通过richtextbox(rtbData)显示程序正在检索信息:

    public void readInData()
    {
        rtbData.Clear();
        rtbData.AppendText("...Retrieving Data From Database...");

        reader = dataCommand.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                numbers.Add(reader.GetInt32(0).ToString());
                names.Add(reader.GetString(1));
                weights.Add(reader.GetDouble(2).ToString());
                statuses.Add(reader.GetString(3));
                times.Add(reader.GetDateTime(4).ToString());
                counter++;
            }
        }
        connection.Close();
    }

但无论何时运行,richtextbox都不会清除,消息也不会出现。奇怪的是,当我在rtbData.AppendText命令的正下方插入messagebox.show()命令时,它工作正常。我尝试用thread.sleep命令替换messagebox,但没有成功。有什么想法吗?提前感谢大家。

为了避免阻塞UI线程,您可以异步读取数据库:

    public void readInData()
    {
        rtbData.Clear();
        rtbData.AppendText("...Retrieving Data From Database...");
        Task.Run(() =>
        {
            reader = dataCommand.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    numbers.Add(reader.GetInt32(0).ToString());
                    names.Add(reader.GetString(1));
                    weights.Add(reader.GetDouble(2).ToString());
                    statuses.Add(reader.GetString(3));
                    times.Add(reader.GetDateTime(4).ToString());
                    counter++;
                }
            }
            connection.Close();
        });
    }

请记住,readDatabase可能在一个单独的线程上执行,因此您需要确保它是线程安全的。

问题出在哪里还不是100%清楚。不要忘记,当代码执行SQL命令时,UI线程将很忙,因此无法更新UI;强制刷新,但根据@Daniel Kelley的回答,它不会显示主线程是否已经在忙于从SQL读取器加载数据。