提问人:Livio 提问时间:11/5/2023 最后编辑:Theodor ZouliasLivio 更新时间:11/6/2023 访问量:113
异步等待,如何在 Windows 窗体中使用它们?
Async await, how to use them in a windows form?
问:
string DBconnString =
"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Para1 + @"\Labo_be.mdb;";
var DBConn = new OleDbConnection(DBconnString);
DBConn.Open();
string S_Query = "Select * FROM DISEGNI";
cmd1 = new OleDbCommand(S_Query, DBConn);
DR = cmd1.ExecuteReader();
while (DR.Read())
{
var sName = DR.GetString(DR.GetOrdinal("PARTNBR"));
Combo_Dis.Items.Add(sName);
}
如何使用转换此子?
这个子加载了一个包含超过 35000 个抽奖号码的组合,因此应用程序非常非常慢。async await
答:
0赞
Dmitry Bychenko
11/5/2023
#1
如果您使用 WinForms,它会处于一个很慢的循环中(在我的工作站上大约 5 秒):当您添加新项目时,组合框应该进行一些计算(下拉列表大小)、重新绘制自身等。您只能使用一次来执行此额外工作:Combo_Dis.Items.Add
BeginUpdate() .. EndUpdate()
using var DBConn = new OleDbConnection(
$"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Path.Combine(Para1, Labo_be.mdb)};");
DBConn.Open();
string S_Query =
@"SELECT PARTNBR
FROM DISEGNI";
using var cmd1 = new OleDbCommand(S_Query, DBConn);
using var dr = cmd1.ExecuteReader();
Combo_Dis.BeginUpdate();
try {
while (dr.Read()) {
Combo_Dis.Items.Add(dr[0]);
}
}
finally {
Combo_Dis.EndUpdate();
}
评论
3赞
Livio
11/5/2023
@dmitribychenko,太棒了!现在在我的工作站上,显示窗口的时间减少到大约 2-3 秒!非常感谢!!!!
评论