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;
}
}
}
测试:
static void Main(string[] args)
{
DemoTest dt = new DemoTest();
dt.events += dt_events;
dt.T = "副线程";
Thread.Sleep();
DemoTest df = new DemoTest();
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();
dt.events += dt_events;
dt.T = "副线程";
});
t.Start();
Thread.Sleep();
DemoTest df = new DemoTest();
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,田地之外就是操作系统。
欢迎拍砖!
winform总结6=>线程和委托的关系的更多相关文章
- Winform 让跨线程访问变得更简单
Winform 让跨线程访问变得更简单 前言 由于多线程可能导致对控件访问的不一致,导致出现问题.C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出 ...
- {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
- C# 控件线程匿名委托定义
当你在子线程中要修改主线程某个控件的值时,有不想再去定义一个线程变量时,就可以直接使用线程匿名委托来实现. 主要是方便快捷 控件.BeginInvoke(new ThreadStart(delegat ...
- java主线程结束和子线程结束之间的关系
(一)Main线程是个非守护线程,不能设置成守护线程. 这是因为,main线程是由java虚拟机在启动的时候创建的.main方法开始执行的时候,主线程已经创建好并在运行了.对于运行中的线程,调用Thr ...
- JoinableQueue队列,线程,线程于进程的关系,使用线程,线程的特点,守护线程,线程的互斥锁,死锁问题,递归锁,信号量
1.JoinableQueue队列 JoinableQueue([maxsize]):这就像是一个Queue对象,但是队列允许项目的使用者通知生成者项目已经被成功处理.通知进程是使用共享的信号和条件变 ...
- Winform之跨线程更新UI
Winform之跨线程更新UI 使用`Invoke`或者`BeginInvoke`与UI线程交互示例 参考及源码 使用Invoke或者BeginInvoke与UI线程交互示例 private void ...
- winform开发 总结1>winform程序使用线程的必要性,以及正确的使用方式
winform程序中使用线程的必要性: 单线程操作在执行耗时任务时会造成界面假死,带来非常差劲的用户体验,有时候甚至会影响到正常的业务执行,使用多线程做相关操作实属不得已之举. 那么在编写程序之前必须 ...
- 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件
SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...
- winform进程、线程、TreeView递归加载
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...
随机推荐
- input 全选 jquery封装方法
HTML代码 <table class="table table-striped"> <thead> <tr> <th><in ...
- ReactJS-0-React介绍
React介绍: React是一个库而不是一个MVC框架,因为React只负责解决MVC框架中V(View)层面的问题,React致力于创建可重用的UI组件.(React is a library f ...
- mac系统 usr/ 目录下无法新建文件夹???
这个问题是在操作mongodb的时候遇到的,很苦恼.目前已经解决,将解决方法分享给各位遇到同样问题的你们. 1.重启电脑,开始关机就立马按住command+R,进入macOS恢复功能界面,进入的时间可 ...
- 关于react native在window下运行安卓的时候报 could not connect to development server
当出现这种问题是网上的解答方案都是一模一样的! 我这边先给个地址讲的是解决方案http://blog.csdn.net/qq_25827845/article/details/52974991 但是我 ...
- asp 读取 另外一个带参数的asp文件(服务器不支持!放弃吧!骚年!)
(服务器不支持!放弃吧!骚年!) 主要作用是为了分离数据库,灵感是这样的:收到json影响,把asp里的数据,用一个页面输出,然后用另外一个页面读取,这样就不用有数据库位置的烦恼了 代码 网上有很多, ...
- mysql 查看存储过程 并导出
查询数据库中的存储过程 select * from mysql.proc where db = dbName and `type` = 'PROCEDURE' show procedure statu ...
- ubuntu 普通用户运行virt-manager时libvirt权限设置
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission deniederror: failed t ...
- python circle nested
#!/usr/bin/python # -*- coding:utf- -*- # @filename: tmp2 # @author:vickey # @date: // : def circle_ ...
- Java代码的编译和执行
Java代码编译和执行的整个过程包含了以下三个重要的机制: (1)Java源码编译机制 (2)类加载机制 (3)类执行机制 1.Java代码编译是由Java源码编译器来完成,流程图: Java 源码编 ...
- 分布式集群算法 memcached 如何实现分布式?
memcached 是一个”分布式缓存”,然后 memcached 并不像 mongoDB 那 样,允许配置多个节点,且节点之间”自动分配数据”. 就是说--memcached 节点之间,是不互相通信 ...