C# Delegate(委托)与多线程
实现功能:在窗体中更新listview数据。
1、定义委托
private delegate void FlushClient(ListViewItem lvi,int j); //代理 参数与方法中一致
2、定义方法
FlushClient fc = new FlushClient(tick);//创建对象,注意括号内是方法,调用后刷新
private void tick(ListViewItem lvi,int j) { if (listView2.InvokeRequired) { FlushClient fc = new FlushClient(tick); listView2.Invoke(fc, new object[] { lvi,j }); //通过代理调用刷新方法 } else { listView2.Items.Add(lvi); } }
定义一个定时器去工作
private void SleepT() { while (blFlag) { Thread.Sleep(1); ts3 = new TimeSpan(DateTime.Now.Ticks); if (ts3.Subtract(ts2).Ticks >= 10 * 1000 * 1000) { ListViewItem lvi = new ListViewItem(); ts2 = new TimeSpan(ts2.Ticks + 10 * 1000 * 1000); lvi.Text = j.ToString(); lvi.SubItems.Add((ts3.Subtract(ts2).Ticks * 0.0000001).ToString()); j++; tick(lvi,j); } }
3、定义新线程
td.IsBackground = true;//很关键,加上这一句就可以在结束程序时关掉线程了
private void button1_Click(object sender, EventArgs e) { ts2 = new TimeSpan(DateTime.Now.Ticks); Thread td = new Thread(SleepT); td.IsBackground = true; td.Start(); }

浙公网安备 33010602011771号