【发布时间】:2013-10-15 17:30:26
【问题描述】:
我有一个使用 ODBC 查询基于文本的数据库的 .NET 4.5 WinForm 程序。然后,我想在多行文本框中显示每个结果,并且我想以最快的方式完成。
在更新/填充文本框期间,GUI 不必可用。但是,如果我可以更新进度条以让用户知道正在发生某些事情,那就太好了 - 我相信为此需要后台工作人员或新线程/任务,但我从未实现过。
我最初使用这段代码,它很慢,因为它在继续下一行之前每行都提取结果。
OdbcDataReader dbReader = com.ExecuteReader();
while (dbReader.Read())
{
txtDatabaseResults.AppendText(dbReader[0].ToString());
}
这明显更快。
string resultString = "";
while (dbReader.Read())
{
resultString += dbReader[0].ToString();
}
txtDatabaseResults.Text = resultString;
但是在文本框出现之前有很长的等待时间,所以我想知道操作是否可以更快。现在我从文件中获取大约 7,000 行,我认为没有必要切换到 AvalonEdit(如果我的思维方式错误,请纠正我,但我想保持简单并使用内置的文本框)。
【问题讨论】:
-
您可能对 My Example 使用当前相关的 .Net Windows UI 技术感兴趣。
-
只需备注您对后台工作人员或新线程/任务的评论,后台工作人员非常易于使用。前一周我刚刚了解到他们并坠入爱河。 dotnetperls 有一个很好的简单示例来说明如何使用它:dotnetperls.com/progressbar 除了将 i 传递给 ReportProgress 方法之外,您必须执行一些基本的数学运算来确定您的任务的百分比,例如当前行划分按结果集中的总行数。
-
@HighCore 很好的链接和答案,但可能对我当前的应用程序来说太强大了。
-
@valsidalv 这是一个常规的 .Net 4.0 解决方案,它甚至比您正在使用的当前 .Net 版本还要旧。我不明白这是怎么“权力太大”。不同之处在于我在 .Net (WPF) 中使用了正确的类,而不是已弃用的类。
-
WPF world中的@valsidalv,那只是一个trivial thing,没有你想象的那么强大。