在后台填充组合框c#

时间:2017-01-27 11:01:49

标签: c# sql multithreading combobox

我正在Visual Studio 2013使用Windows Forms进行项目。

我有几种表格(LogInMenyFakturaSokning(现在))

当您启动该计划时,请打开LogIn,当您登录时,转到Meny,您可以在其中打开FakturaSokning

现在我遇到了问题。 我有2个名为comboBoxFaktNr1comboBoxFaktNr2的组合框,我试图用从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表格时在背景中填充组合框,并在完成后自动更新组合框,或者在MenyLogIn时进行组合操作形成的?

如果我错过了一些相关信息告诉我,我会尽快添加它。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用在单独线程上执行操作的Backgroundworker。

Backgroundworker MSDN

答案 1 :(得分:0)

这个缝合一直是个问题。我在尝试使用它之前遇到的问题是我试图通过代码制造和使用工人manualy。但是,如果我使用ToolBox并从那里添加了一个工作人员一切正常。 这是我在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);
                        }));

                }