博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[2014-9-13]委托多线程
阅读量:5214 次
发布时间:2019-06-14

本文共 1776 字,大约阅读时间需要 5 分钟。

周六学习的时间。

继续学习委托,多线程。

1.简单委托的定义

delegate int MyDel(int a,int b);

MyDel myDel = new MyDel(Add); //Add方法必须和委托MyDel有相同的参数和返回值

myDel+=Add2 //多播委托

2.匿名函数

MyDel del =delegate(int a,int b){return a+b}

console.write(del(3,1))

3.lamba表达式

MyDel lamba =(a,b)=>{return a+b}

可以简写为 MyDel lamba=(a,b)=>a+b;

console.write(lamba(3,1));

4 扩展方法

写扩展方法满足:静态类,静态方法,this

示例代码:

        static void Main(string[] args)

        {
            List<string> list = new List<string>() { "1", "2", "3", "4" };
           var temp = list.findCalc(MyCalc);// 扩展方法的调用
           foreach (var item in temp)
           {
               Console.WriteLine(item);
           }
           Console.ReadKey();
        }
        static bool MyCalc(string str) // 方法与委托类型保持一致
        {
            if (int.Parse(str) >= 2)
            {
                return true;
            }
            return false;
        }

扩展方法:

namespace System.Collections.Generic //注意命名空间写在List泛型集合的空间保持一致,方便调用

{
    delegate bool IsOkdel<T>(T obj); //定义委托
   static class fun
    {
      public static List<T> findCalc<T>(this List<T> list,IsOkdel<T> del)  //this关键字,表示在List上面
       {
           List<T> result = new List<T>();
           foreach (var item in list)
           {
               if (del(item))
               {
                   result.Add(item);
               }
           }
           return result;
       }
    }
}
5 泛型委托

Func<int,bool> del = a=> a>2 //有返回值

Action<>无返回值

            List<int> myIntLst = new List<int>() { 1, 2, 3, 4, 5, 6 };

            //把一个委托传递到一个方法里面去,然后在方法里面调用。判断集合满足条件的给返回
            var result = myIntLst.Where(del);
            foreach (var i in result)
            {
                Console.WriteLine(i);
            }

6 带参数的线程

  Thread thread = new Thread(a =>  //参数为一个委托

            {
                while (true)
                {
                    //Thread.CurrentThread.ManagedThreadId :是CLR帮我们分配
                    Console.WriteLine("这是子线程在干活呢..参数值:{0}.@{1}", a, Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(1000);
                }
            });
             thread.IsBackground = true;
             thread.Start(2);//传递参数

7 对前面错误的理解

线程的调度是由操作系统而定的,你设置调度的优先级为最高也是由操作系统而决定,不是安装先执行主线程而再执行别的线程。

 

 We believe one thing,today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful.

转载于:https://www.cnblogs.com/wuyuetian/p/3970229.html

你可能感兴趣的文章
Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】...
查看>>
MySQL学习笔记(二):MySQL数据类型汇总及选择参考
查看>>
jQ 移动端返回顶部代码整理
查看>>
博客园界面美化
查看>>
sql查询远程数据库的表的数据并填充到本地数据库的表
查看>>
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>