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}
  • 相关阅读:
    loading加载动画
    js获取文本的行数
    获取浏览器结尾生成的参数,提交的时候对其做判断
    js获取当前浏览器地址栏的链接,然后在链接后面加参数
    a链接在新窗口打开
    js随机出现2个数字
    css进行中打点效果
    jqeury显示前几个,隐藏后几个,点击后隐藏前几个显示后几个
    jQuery 源码解析(七) jQuery对象和DOM对象的互相转换
    jQuery 源码解析(六) $.each和$.map的区别
  • 原文地址:https://www.cnblogs.com/ifan/p/1250088.html
Copyright © 2011-2022 走看看