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();
        }

 

posted @ 2022-04-02 15:37  hardenzhao  阅读(434)  评论(0)    收藏  举报