从SQl读取时,C#不写入富文本框

时间:2014-08-27 13:25:10

标签: c# sql richtextbox

我正在尝试使用以下代码清除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命令替换消息框,但它不起作用。有任何想法吗?提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

为避免阻塞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可以在单独的线程上执行,因此您需要确保它是线程安全的。