C# Delegate(委託)與多執行緒
阿新 • • 發佈:2022-04-02
實現功能:在窗體中更新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(); }
搜尋
複製