繁体   English   中英

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

[英]C# not writing to rich textbox when reading from SQl

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM