我正在尝试使用以下代码清除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命令替换消息框,但它不起作用。有任何想法吗?提前谢谢大家。
答案 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可以在单独的线程上执行,因此您需要确保它是线程安全的。