我正在使用Windows Forms
在Visual Studio 2013
做一个项目。
我有几种形式(LogIn
,Meny
,FakturaSokning
(目前))
启动程序时,打开LogIn
,登录后转到可以打开FakturaSokning
的Meny
。
现在谈谈我遇到的问题。我有 2 个名为 comboBoxFaktNr1
和 comboBoxFaktNr2
的组合框,我正在尝试用我从 SQL 服务器获得的FaktNr
填充它们。我连接到服务器
MigrateDBFakturaEntities db = new MigrateDBFakturaEntities();
并获取相关信息
var t = db.Fakturor.OrderBy(z => z.FaktNr).ToList();
我尝试的第一件事是做一个foreach循环
foreach (var item in t)
{
comboBoxFaktNr1.Items.Add(item.FaktNr);
}
女巫有效,但问题是它停止响应直到完成。
我怎样才能让它在打开FakturaSokning
表单时在后台填充组合框,并在完成后自动更新组合框,或者在Meny
或LogIn
表单中吃掉时自动更新组合框?
如果我错过了一些相关信息,请告诉我,我会尽快尝试添加它。
您可以尝试使用在单独的线程上执行操作的后台工作者。
后台工作者 MSDN
这个接缝一直是问题所在。我之前尝试使用它时遇到的问题是我试图通过代码手动制作和使用工人。但是,如果我使用工具箱并从那里添加一个工人,一切正常。这是我在DoWork中使用的代码
BackgroundWorker worker = sender as BackgroundWorker;
List<Fakturor> t = db.Fakturor.OrderBy(z => z.FaktNr).ToList();
foreach (var item in t)
{
comboBoxFaktNr1.Invoke((Action)(() =>
{
comboBoxFaktNr1.Items.Add(item.FaktNr);
}));
}