2017-01-27 11 views
0

Visual Studio 2013のプロジェクトをWindows Formsで行っています。コンボボックスC#を背景に埋め込みます

私は(今のところLogInMenyFakturaSokning())の形のカップルを持っている

あなたがLogInを開き、あなたの中にあなたをログインしたときのプログラムは、あなたがFakturaSokningを開くことができますMenyに行くを開始すると。

今問題があります。 comboBoxFaktNr1comboBoxFaktNr2という2つのコンボボックスがあり、私はFaktNrをSQLサーバーから入手しています。私は

MigrateDBFakturaEntities db = new MigrateDBFakturaEntities(); 

でサーバーに接続して、私が試した最初のものは、foreachループ

foreach (var item in t) 
{ 
    comboBoxFaktNr1.Items.Add(item.FaktNr); 
} 

魔女の作品が、これで問題が発生していた

var t = db.Fakturor.OrderBy(z => z.FaktNr).ToList(); 

whith relevent情報を入手しますそれが完了するまで応答を停止したということでした。

は、どのように私はそれがeather FakturaSokningフォームとオートを開くときにそのが行われたときにコンボボックスを更新し、バックグラウンドでのコンボボックスを埋めるとき、またはeather MenyまたはLogIn形でそれを行うことができますか?

もし私がいくつかの相対的な情報を見逃してしまったら、私はできるだけ早くそれを追加しようとします。

+1

コンボにいくつのアイテムを追加していますか? – stuartd

+0

'' AddRange() ']ではなく' 'AddRange()'](https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.objectcollection.addrange(v = vs.110) Add() 'を使ってすべての項目を一度に追加すると便利です – stuartd

+0

私は今使っているデータベースが約17000ですが、後で100000を超えるかもしれません – Drago87

答えて

1

別のスレッドで操作を実行するBackgroundworkerを試すことができます。

Backgroundworker MSDN

+0

私はそれを見ましたが、私はそれを働かせませんでした。私はeatherに何の反応もエラーもありませんでした。正確なエラーを覚えていないが、別のスレッドやそれに類するものでコンボボックスを変更できないものがあった。 – Drago87

+1

@ Drago87あなたは 'Invoke()'を使ってそれを得ることができます – stuartd

0

これが問題であったとseamd。また、私が以前に使用しようとしていたときの問題は、作業者をマニュアルで作成してコードで使用しようとしたことでした。しかし、もし私がツールボックスを使用し、そこからワーカーを追加したのであれば、すべてが機能しました。 これは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); 
         })); 

       } 
関連する問題