delegate

WPF Invoke与BeginInvoke的区别

十年热恋 提交于 2020-05-06 02:49:50
Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。 Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。     就是一个是同步的一个是异步的,也就是一个需要等待一个不需要等待 //这个输出123 private void button1_Click(object sender, RoutedEventArgs e) { textblock.Text += "1"; this.Dispatcher.Invoke(new InvokeDelegate(Test)); textblock.Text += "3"; } private void Test() { textblock.Text += "2"; } private delegate void InvokeDelegate(); //这个输出132 private void button1_Click(object sender, RoutedEventArgs e) { textblock.Text += "1"; this.Dispatcher.BeginInvoke(new InvokeDelegate(Test)); textblock.Text += "3"; } private void

c#运用this.invoke() 在多线程时对UI进行修改

核能气质少年 提交于 2020-05-06 02:49:37
什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误 的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。 正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。(参考文章底部) 而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。 Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); 例: /* 相机打开回调 */ private void OnCameraOpen

C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

这一生的挚爱 提交于 2020-05-06 02:49:26
概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常。处理跨线程更新Winform UI控件常用的方法有4种: 1. 通过UI线程的SynchronizationContext的Post/Send方法更新; 2. 通过UI控件的Invoke/BeginInvoke方法更新; 3. 通过BackgroundWorker取代Thread执行异步操作; 4. 通过设置窗体属性,取消线程安全检查来避免"跨线程操作异常"(非线程安全,建议不使用)。 下文中对以上3种方法应用进行举例说明,希望能对初识C# Winform的同学们有些帮助。 成文表分享交流之意,惶恐水平有限,文中理解和表述有错误之处还请大家多被批评指正。 更新记录: 2018年2月3日,根据网友评论提示更新错别字,BegainInvoke=》BeginInvoke。 正文 1. 通过UI线程的SynchronizationContext的Post/Send方法更新 用法: //共分三步 //第一步:获取UI线程同步上下文(在窗体构造函数或FormLoad事件中) /// <summary> /// UI线程的同步上下文 /// </summary> SynchronizationContext m_SyncContext = null;

ASP.NET MVC 企业级实战

会有一股神秘感。 提交于 2020-05-06 01:46:29
1、泛型 public class List<T>{ } 当定义泛型类的实例时,必须指定这个实例所存储的实际类型,泛型允许程序员将一个实际的数据类型规约延迟至泛型的实例被创建时才确定,泛型主要有两个有点: 1)编译时可以保证类型安全 2)不用做类型装换,获得一定的性能提升。 2、泛型方法、泛型委托、泛型接口 //泛型委托 public delegate void Del<T>(T item); public static void Notify(int i){} //泛型接口 public class myClass<T1,T2,T3>:MyInteface<T1,T2,T3>{ public T1 Method1(T2 param1,T3 param2){ throw new NotImplementedException();}} interface MyInteface<T1,T2,T3>{ T1 Method1(T2 param1,T3 param2); } //泛型方法 static void Swap<T>(ref T t1,ref T t2){ T temp=t1; t1=t2; t2=temp; } public void Interactive(){ string str1="a"; string str2="b"; Swap<string> (ref str1

.NET进阶篇02-Delegate委托、Event事件

泪湿孤枕 提交于 2020-05-06 01:46:00
知识只有经过整理才能形成技能 内容目录 一、概述 二、解析委托知识点 1、委托本质 2、委托的使用 3、委托意义 逻辑解耦,减少重复代码 代码封装,支持扩展 匿名方法和Lambda表达式 异步多线程 多播委托 三、事件 四、总结 一、概述 先说下委托,委托我们也经常用到。详尽了解委托是必要的,不然在异步多线程的编程中会一头雾水。 委托本质就是一个类 ,和我们平常定义的类没多大区别。只是这个类的作用的是描述一些方法,没有数据成员。 一个委托定义了一类拥有同样返回类型和参数的方法规范 。委托的声明语法就是一个没有方法体的方法前面加上 delegate 关键字。既然本质是一个类,那它就可以在任何可以定义普通类的位置来定义委托。 委托是一个能把方法作为参数传递的对象 。 事件就简单了, 事件就是委托的一个实例 。 二、解析委托知识点 1、委托本质 在VS中编码中,声明委托后,会发现委托的着色提示和类时一样。 但好像不是很有说服力。高级语法都做了很好的封装,方便编码人员。.NET的二次编译,第一次编译成IL中间语言,中间语言也是一种编程语言,只是它不像高级语言那么方便人类阅读。我们可以通过一些工具(像ILSpy)反编译来窥探下它的内部逻辑。 如图中红框所示,我们定义的普通类MyDelegate和委托类型NoReturnPara(继承自MulticastDelegate)是一致的

委托、匿名方法、Lambda表达式、泛型委托(自定义、Func、Action、Predicate)、约束泛型类和方法、多窗体传递消息、事件、异步编程、二次控件开发

我只是一个虾纸丫 提交于 2020-05-06 00:35:55
1.匿名方法   没有具体名称,只有委托关键字、方法参数、方法体,所以称之为匿名方法   匿名方法允许将代码块(方法体部分)通过委托变量作为参数传递,以代替独立定义的方法 总结:   方法体要以delegate开头,其后是参数列表,后面紧跟花括号编写方法体,最后以分号结尾   匿名方法是将方法定义与委托变量两个步骤合在一起,省略了方法的单独定义   如果一个方法有一个委托类型的参数,可以直接将匿名方法作为实参。 1 // 声明委托 2 public delegate int MyDelegate( int a, int b); 3 4 static void Main( string [] args) 5 { // 匿名方法 6 MyDelegate objDel = delegate ( int a, int b) 7 { 8 return a + b; 9 }; 10 Console.WriteLine(objDel( 10 , 20 )); 11 Console.ReadLine(); 12 } 匿名方法 2.lambda表达式   C#3.0引入lambda表达式,lambda表达式是匿名方法更简介使用的一种方式   (参数列表) => {方法体} =>读作goes to   lambda表达式参数列表中的参数类型可以是“明确”类型或者是“推断类型”(可以省略参数类型)  

C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

我怕爱的太早我们不能终老 提交于 2020-05-05 15:53:45
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持。微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范。 这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性。 C#语言规范GitHub库参见: https://github.com/dotnet/csharplang C#语言路线图及开发中的特性参见: https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md 语言版本 发布时间 .NET Framework要求 Visual Studio版本 C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002 C# 1.1\1.2 2003.4 .NET Framework 1.1 Visual Studio .NET 2003 C# 2.0

《ASP.NET MVC 5 网站开发之美》

南楼画角 提交于 2020-05-05 11:30:08
**《ASP.NET MVC 5 网站开发之美》 ========== ========== ========== [作者] (台) demo (台) 小朱 (台) 陈传兴 (台) 王育民 (台) 陈仕杰 [出版] 清华大学出版社 [版次] 2015年09月 第1版 [印次] 2017年03月 第2次 印刷 [定价] 128.00元 ========== ========== ========== 【第01章】 (P004) 目前网页前端技术非常多元化,开发者一定要选择容易自定义与修改的框架作为主要开发框架。 (P005) Model 可翻译为数据模型, “数据模型” 用于封装与应用程序在商业逻辑上相关的数据,以及对其数据操作的处理方法。 Model 并不依赖 View 或 Controller ,也就是说 Model 不需要知道它会如何被显示或如何被应用,只需要专注于做好数据访问、定义、验证的责任即可。 在 ASP.NET MVC 中推荐使用强类型的方式设计 Model 层,才可以有效地利用内建的模型绑定 (Model Binding) 与模型验证机制。 (P007) 在项目初期设计的时候建议将用户接口层和商业逻辑层明确地分离开,后续在开发上也会比较顺手。 (P010) 开发人员可以在同一项目中增加许多核心引用。 (P011) Single Page Application

[转]windows BLE编程 net winform 连接蓝牙4.0

岁酱吖の 提交于 2020-05-05 01:36:50
本文转自: https://www.cnblogs.com/webtojs/p/9675956.html winform 程序调用Windows.Devices.Bluetoot API 实现windows下BLE蓝牙设备自动连接,收发数据功能。不需要使用win10的UWP开发。 先贴图,回头来完善代码 源码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.Devices.Bluetooth; using Windows.Devices.Bluetooth.GenericAttributeProfile; using Windows.Devices.Enumeration; using Windows.Foundation; using Windows.Security.Cryptography; namespace BLECode { public class BluetoothLECode { //存储检测的设备MAC。 public string CurrentDeviceMAC { get; set; } //存储检测到的设备。 public

windows BLE编程 net winform 连接蓝牙4.0

不想你离开。 提交于 2020-05-04 13:03:51
winform 程序调用Windows.Devices.Bluetoot API 实现windows下BLE蓝牙设备自动连接,收发数据功能。不需要使用win10的UWP开发。 先贴图,回头来完善代码 源码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.Devices.Bluetooth; using Windows.Devices.Bluetooth.GenericAttributeProfile; using Windows.Devices.Enumeration; using Windows.Foundation; using Windows.Security.Cryptography; namespace BLECode { public class BluetoothLECode { // 存储检测的设备MAC。 public string CurrentDeviceMAC { get ; set ; } // 存储检测到的设备。 public BluetoothLEDevice CurrentDevice { get ; set ; } //