zoukankan      html  css  js  c++  java
  • winform总结6=>线程和委托的关系

    基础类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 线程和事件的关系
    {
        public class DemoTest
        {
            public DemoTest(int time)
            {
                this.Time = time;
            }
            public delegate void DosomeThing(object sender,SetEventArgs setet);
            public event DosomeThing events;
            public int Time { get; set; }
            private string _t;
            public string T
            {
                get
                {
                    return _t;
                }
                set 
                {
                    this._t = value;
                    SetEventArgs set = new SetEventArgs(this._t,this.Time);
                    if (this.events != null)
                    {
                        events(this, set);
                    }
                }
            }
        }
        public class SetEventArgs : EventArgs
        {
            public int Time { get; set; }
            public string Name { get; set; }
            public SetEventArgs(string name,int time)
            {
                this.Name = name;
                this.Time = time;
            }
        }
    }
    View Code

    测试:

     static void Main(string[] args)
            {
                DemoTest dt = new DemoTest(10000);
                dt.events += dt_events;
                dt.T = "副线程";
                Thread.Sleep(100);
                DemoTest df = new DemoTest(1);
                df.events += dt_events;
                df.T = "主线程";
                Console.ReadKey();
            }
            static void dt_events(object sender, SetEventArgs setet)
            {
                Thread.Sleep(setet.Time);
                Console.WriteLine(setet.Name);
            }

    执行结果:先打印副线程然后打印主线程

     static void Main(string[] args)
            {
                Thread t = new Thread(() =>
                {
                    DemoTest dt = new DemoTest(10000);
                    dt.events += dt_events;
                    dt.T = "副线程";
                });
                t.Start();
                Thread.Sleep(100);
                DemoTest df = new DemoTest(1);
                df.events += dt_events;
                df.T = "主线程";
                Console.ReadKey();
            }
            static void dt_events(object sender, SetEventArgs setet)
            {
                Thread.Sleep(setet.Time);
                Console.WriteLine(setet.Name);
            }

    执行结果:先打印主线程再打印副线程

    结论:将程序比作一棵树,那么类的实例,变量就是构成树的基本单元,主树干就是主线程,分支就是分线程,委托相当于绿叶,不同线程上边的委托相当于不同分支的绿叶,相同的叶子代表同一个委托链,任何输送到该叶子上边的养分阳光都会顺序吸收。生长的田地便是.netframework,田地之外就是操作系统。

    欢迎拍砖!

     

  • 相关阅读:
    APP之百度地图SDK的AK值获取(android)
    横向滚动菜单-选中标题居中显示
    函数按引用传参问题
    js验证提交
    Java servlet ajax
    数据库3种读
    mybatis插件
    mybatis 缓存
    从前端对象中获取的文本变为字符串,并替换其中一些指定的字符
    多个窗口开启后,切换到指定title的窗口
  • 原文地址:https://www.cnblogs.com/zzfstudy/p/6306611.html
Copyright © 2011-2022 走看看