C#中的BackgroundWorker控件+Delegate.Invoke (委託同步調用)ide
簡單代碼,記錄一下。一個BackgroundWorker控件 backgroundWorkerRefresh +listview控件this
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace CallCenter { public partial class MainFrm : Form { public bool isStart = false; public MainFrm() { InitializeComponent(); RefreshDisp(); } private void RefreshDisp() { lv.Items.Clear(); for (int i = 0; i < 8; i++) { ListViewItem lvitem = new ListViewItem(); lvitem.SubItems[0].Text = i.ToString(); lvitem.SubItems.Add("項目編號" + i.ToString()); lvitem.SubItems.Add("項目名稱" + i.ToString()); lvitem.SubItems.Add("項目負責人" + i.ToString()); lvitem.SubItems.Add("項目年度-" + i.ToString()); lvitem.SubItems.Add(DateTime.Now.ToString() + " -" + i.ToString()); lvitem.SubItems.Add(" #" + i.ToString()); lv.Items.Add(lvitem); } } private void RefreshDispCH(int ch) { L_Status.Text = lv.Items[ch].SubItems[6].Text; lv.Items[ch].SubItems[6].Text = "test"; for (int i = 0; i < 7; i++) { lv.Items[ch].SubItems[i].Text = DateTime.Now.ToString() + " -" + i.ToString(); } } public delegate void D_RefreshDisp(); public delegate void D_RefreshDispCH(int ch); private void backgroundWorkerRefresh_DoWork(object sender, DoWorkEventArgs e) { do { // this.Invoke(new D_RefreshDisp(RefreshDisp)); Thread.Sleep(1000); this.Invoke(new D_RefreshDispCH(RefreshDispCH), 3); } while (isStart); } private void backgroundWorkerRefresh_ProgressChanged(object sender, ProgressChangedEventArgs e) { } private void Startbutton_Click(object sender, EventArgs e) { Startbutton.Enabled = false; isStart = true; backgroundWorkerRefresh.RunWorkerAsync(); } } }