自动更新 C# 列表框

本文关键字:列表 更新 | 更新日期: 2023-09-27 18:33:22

我想运行后台工作线程以使用 mssql 数据库中的值更新列表框。我得出了这个:

    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 错误。

关于如何解决这个问题的想法?只要程序正在运行,我只想运行列表框的更新。

自动更新 C# 列表框

当我们从 GUI 以外的线程访问某些 GUI 控件时,我们会遇到这种情况

尝试访问此委托结构中的 GUI 元素

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