2012-05-06 10 views
0

バックグラウンドワーカーを実行してリストボックスをmssqlデータベースの値で更新したいとします。私はこれで出てきた:自動更新C#リストボックス

public frmMain()  { 
     InitializeComponent();    
     bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
    } 

    private void frmMain_Load(object sender, EventArgs e) { 
      if (bw.IsBusy != true) 
      { 
       bw.RunWorkerAsync(); 
      } 
    } 

    private void bw_DoWork(object sender, DoWorkEventArgs e){ 
     BackgroundWorker worker = sender as BackgroundWorker; 
     for (int i = 1; (i <= 10); i++) { 
      if ((worker.CancellationPending == true)) { 
       e.Cancel = true; 
       break; 
      } 
      else    { 
       (1) LoadPrescriptions(); //load the date in a list and writes the list into the listbox 
       (2) System.Threading.Thread.Sleep(500); 
      } 
     } 
    } 


    private void LoadPrescriptions() 
    { 
     main_controller = new MainController(); 
     prescriptionsList = new List<Prescription>(); 
     prescriptionsList = main_controller.LoadPrescriptions(0); 
     lstPrescriptions.Items.Clear(); 
     for (int i = 0; i < prescriptionsList.Count; i++) 
      lstPrescriptions.Items.Add(prescriptionsList[i].name + " " + prescriptionsList[i].surname); 
    } 

の間のどこか(1)及び(2)私はA first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll エラーが発生します。

私はこれをどのように修正できますか?プログラムが実行されている間、リストボックスの更新を実行したいだけです。

+0

このデリゲート構造内のGUI要素にアクセスしてくださいあなたはまだLoadPrescriptionsで例外を取得するかどうかを確認する – Adil

+0

何ですか?私が理解しなかったので、より良く説明してください。私はLoadPrescriptionで "for"とコメントしましたが、まだエラーが出ます。 –

+0

私はあなたがLoadPrescriptionsメソッドでコンボのようないくつかのWindowsコントロールにアクセスするのですか? – Adil

答えて

2

我々は、他のスレッドからいくつかのGUIコントロールにアクセスすると、その後GUIは、我々は状況

のこの種に入ると、GUI要素およびデバッグにはアクセスしないでください

 MethodInvoker objMethodInvoker = delegate 
     { 
      //access and assign data to list control here    
     }; 
     if (InvokeRequired) 
      BeginInvoke(objMethodInvoker); 
     else 
      objMethodInvoker.Invoke(); 
+0

アップデートが正常に動作しています。今私は範囲外の例外のインデックスに対処する必要があります。 –

+0

3つの要素のサイズを持つ配列の4番目の要素にアクセスするようなサイズの配列のようなコレクションにアクセスしているかどうかを確認してください。 – Adil

+0

プログラムや何かにエラーがあったと思います。ありがとうございました。 –