zoukankan      html  css  js  c++  java
  • 简单的多线程通信实例(用委托事件实现)

     1using System;
     2using System.Threading;
     3
     4namespace ifan
     5{
     6    //自定义委托声明
     7    public delegate void childExitDelegate(object sender, ChildExitEventArgs e);
     8
     9    public class TDelegate
    10    {
    11        //自定义的事件,实际上就是上面那个委托类型的实例
    12        public static event childExitDelegate onChildThreadExit;
    13
    14        private static void Main()
    15        {
    16            //订阅事件,就是说,当onChildThreadExit事件发生时调用onChildExitFunction方法
    17            onChildThreadExit += onChildExitFunction;
    18
    19            //产生一个子线程,ParameterizedThreadStart可以带一个object参数,所以2.0之后我都用这个很方便
    20            Thread t = new Thread(new ParameterizedThreadStart(childRunning));
    21            t.Name = "子线程1";
    22            
    23            //在这里,我们将onChildThreadExit事件传递进去
    24            //注意,这个事件实际上是委托的实例,也是一个对象
    25            t.Start(onChildThreadExit);
    26        }

    27
    28        //一个可以处理onChildThreadExit事件的方法
    29        private static void onChildExitFunction(object sender, ChildExitEventArgs e)
    30        {
    31            Thread t = (Thread)sender;
    32            Console.WriteLine("子线程名称:{0}", t.Name);
    33            Console.WriteLine("消息:{0}", e.Child_Name_CN);
    34        }

    35
    36        //子线程入口,注意参数类型只能是object
    37        private static void childRunning(object e)
    38        {
    39            Thread.Sleep(2000);
    40            ChildExitEventArgs msg = new ChildExitEventArgs("子线程已经结束");
    41
    42            //把传递进来的参数e转换为childExitDelegate委托类型,也就是一个事件
    43            childExitDelegate sendEventMessage = (childExitDelegate)e;
    44
    45            //触发事件,注意我们要遵守约定,传递事件现场的参数
    46            sendEventMessage(Thread.CurrentThread, msg);
    47        }

    48    }

    49
    50    //自定义事件参数
    51    public class ChildExitEventArgs : EventArgs
    52    {
    53        private string child_name_cn;
    54
    55        public string Child_Name_CN
    56        {
    57            get {return child_name_cn;}
    58        }

    59
    60        public ChildExitEventArgs(string _child_name_cn)
    61        {
    62            child_name_cn = _child_name_cn;
    63        }

    64    }

    65}
  • 相关阅读:
    Adobe Edge Animate –EdgeCommons Log和全局变量设置功能
    Adobe Edge Animate –使用EdgeCommons加载和播放音频
    Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换
    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片
    Adobe Edge Animate –修改Edge Commons Spotlight功能,使之能支持播放中国网站视频
    Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
    Adobe Edge Animate –使用css制作菜单
    Adobe Edge Animate –Edge Commons强势来袭,Edge团队开发成为现实
    Adobe Edge Animate –可重复使用的个性化按钮制作
    Adobe Edge Animate –弹性的方块-使用tweenmax缓动效果
  • 原文地址:https://www.cnblogs.com/ifan/p/1250088.html
Copyright © 2011-2022 走看看