二〇一四寒假自学笔记

寒假在家无聊,找了一本还不易的电子书来学习,

一是复习了原先最先学的一对基本类,

二是学一些那时候老师未有教的事物,

看的书是pdf的之所以上面全部是手打出去的,有何样错误在劫难逃。

骨子里三个寒假只看了那般一点依旧很懒惰的。

放上来未来自个儿好查。未来空闲了还足以看看。

快捷键

Ctrl + Enter
(在光标钦定地方的方面加多一行,并将光标移至新增加加行的行第一地方)
Ctrl + Shift + Enter
(在光标钦点地方的底下增加一行,并将光标移至新增添加行的行第一地方)
Ctrl + Shift + L (删除当前行)

Ctrl + M + O (折叠全部的函数)
Ctrl + M + P (打开具备的函数)

Ctrl + E + C (注释)  <=>   Ctrl + K + C (注释)
Ctrl + E + U (撤除注释)  <=>  Ctrl + K + U (撤消注释)

Ctrl + Enclave + E  自动生成属性

6: Ctrl + .  (调出using菜单;对于未有达成的类能够自动生成)

7: Ctrl + E + S   (查看空白 —
将空格调换为浅灰褐的点,在寻找多余的空格时更是有益)

F12  (转到定义)
Ctrl + _  (转到定义后赶回)
Ctrl + Shift + _  (再度转到定义)

Ctrl + Atl + P  (Attach to Process 追踪调节和测量试验有些进程)

Ctrl + Shift + 左右方向键  (以单词为单位向左或向右选中代码)

Ctrl + Tab (切换VS中的不相同文件窗口)      
Alt + Tab (切换Windows的不如窗口)

prop + Tab + Tab (创建C#中的属性,之后用Tab实行岗位的切换)

Ctrl + K + X (Insert Snippet 插入VS定义好的代码模板, 例如选取中间的Visual C# 之后方可选拔好种种不一样的模块,比如选拔prop
name和12的功用是同等的, 还能挑选 try,tryf,using,while
等等,那几个足以到VS中实际上去探访 )

Ctrl + B + T (标志当前行)
Ctrl + B + P (将光标移动到前一个标志行)
Ctrl + B + N(将光标移动到后二个标识行)
Ctrl + B + C (移除全部的标志行)
Ctrl + W + B
(列出全数的标识行,即:展开八个新的窗口,若想张开愈来愈多的小窗口请点击VIEW)

【注:标志行可以标志我们所关怀的代码段,进而完毕不相同代码段的切换,比如作者想比较两端代码段的争议,可能参照某段代码完毕新的效应。当然也无庸置疑不会忘
Ctrl + A, Ctrl + C, Ctrl + V, Ctrl + X, Ctrl + Z, Ctrl + S】

Ctrl + E + D (对当前页VS中的代码块举行格式化) ,选中VS中的代码 然后

Ctrl + E + F (对中选的代码段举办格式化)

正如字符串方法:Compare,CompareTo,Equals
1.Compare    int Compare(str1,str2,bool)  
 相比相当多个字符串,bool为true就能够忽视大小写,再次来到值0表示分外
2.CompareTo    str1.CompareTo(str2)        其实正如的是在字典中的地点
3.Equals    str1.Equals(str2)        同样再次来到true,反则false
        string1.Equals(str1,str2)

格式化字符串:    string.Format(str1)
截取字符串:    str1.Substring(int,int)        起首位置,截取字符数量
分割字符串:    str1.Split(char[])        重回一个数组
插入字符串:    str1.Insert(int,str)        插入地方,插入字符串
填充字符串:    str1.padRight(int,char)    padLeft
结果中的字符串数量,填充字符
删除字符串:    str1.Remove(int,int)      
 最初删除的岗位,内定删除的数量
轮换字符串:    str1.Replace(str,str)        可能四个char

待替换的字符串,替换的新字符串

int[] arr = new int[5]{1,2,3,4,5};
宣称贰个数组变量能够不对其伊始化,但在对数组伊始化时必须选拔new运算符
string[] arrStr;
arrstr = new string[7]{“sun”,”mon”,”tue”,”wed”,”thu”,”fri”,”sat”}
声Bellamy个两行两列二维数组
int[,] arr = new int[2,2];
int[,] arr = new int[2,2]{{1,2},{3,4}};
最早化时也得以不内定行数和列数
int[,] arr = new int[,]{{1,2},{3,4}};
获得数组的行数与列数
arr.GetLength(0);列数
arr.GetLength(1);行数
冒泡排序
int[]arr = nem int[]{1,9,27,6,12,21,15};
foreach(int m in arr)
{
    for(int i=0;i<arr.Length-1;i++);
    {
        int j=i+1;
        int temp;
        id:
        if(arr[i]>arr[j])
        {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp
        }
        else if(j<arr.Length-1)
        {
            j++
            goto id;
        }
    }
    foreach(int n in arr)
        {
            Console.Write(n+” “);
            Console.ReadLine(n+” “);
        }
}
应用函数进行排序
Array.Sert(arr);从小到大

Array.Reverse(arr);反向排序(从大到小)

使用ArrayList集合
ArrayList list = new ArrayList();
ArrayList list = new ArrayList(10);钦赐大小
ArrayList list = new ArrayList(arr);
ArrayList方法
List.Add(7);将指标增添至集结结尾处
List.Insert(3,7);将成分加多到索引处,将7增加到索引3
List.Clear();从集结中移除全体因素
List.Remove(3);从集结中移除特定对象的率先个门户大约对象
List.RemoveAt(3);移除集结中一定索引处的要素
List.RemoveRange(3,2);从目录3开时移除2个要素
List.Contalns(2);剖断集结中是不是带有钦命的要素,再次回到布尔值
List.IndexOf(3);搜索钦定的靶子,再次来到第二个匹配项,不然再次来到-1

List.LastIndexOf(3);再次回到最后一个相配项的目录,不然重回-1

使用Hashtable哈希表
Hashtable平日称得上哈希表,用于表示键/值的集纳,
其每多少个因素都以一个积累于DictionaryEntry对象中的键/值对。
键不能够为空,但值能够。
Hashtable table = new Hashtable();
table.Add(“id”,”001″);增多的要素
table.Clear();移除全体因素
table.Remove(“id”);移除钦赐键的成分
foreach(DictionaryEntry dieEntry in
table)Hashtable中的成分是二个键/值对,DictionaryEntry类型表示一个键/值对的聚焦。
table.Contains(“id”);寻觅Hashtable中是还是不是包蕴特定键,再次回到布尔值

table.ContainsValue(“001”);判定是或不是包涵一定值,再次回到布尔值

面向对象
持续:子类能够承接父类中的属性和章程,能够简化类的操作,不小程度上加强支付效能
子类从基类承接时,会获取基类全部的法子,字段,属性,事件。若要改造基类的数目和行事,可以采纳新的派生类成员替换基类成员,只怕重写设想的基类成员。使用新的派生成员替换基类的分子,就要求利用new关键字new关键字放在子类方法,字段,属性的回到类型在此之前。
属性:get,set
静态方法:静态方法不对特定实例操作,在静态方法中引用this会产生编译错误。
艺术重载:调用同一方法名,但各艺术中的参数类型,个数,或相继不一致。
组织:是一种值类型,结构中得以饱含构造函数,常量,字段,方法,属性,运算符,事件和嵌套类型等,但假设要同一时间回顾上述二种成员则应当思量选取类。使用struct定义
构造函数:日常用来初叶化新指标的多寡成员
多种承接:c#的类只帮助单继承,而接口援助单承继,落成时,继承的多少个接口使用,隔绝
多态:多态使子类的实例能够一贯给予基类的对象(不需强制转变)然后通过那个指标调用派生类的章程
包裹能够隐敝达成细节,使得代码模块化。
一连能够扩充已经存在的代码块,它们的目标皆认为着代码重用。
多态则是为了落到实处接口重用。
在C#中类的多态性是通过在子类中重写基类的虚方法只怕函数成员来贯彻的。

C#中,承继,虚方法和重写方法结合在协同手艺兑现多态性。

接口
接口是一种用来定义程序的合计,描述可属于别的类或结构的一组有关行为。
接口可由艺术,属性,事件,索引器那二种成员类型的别样组成构成,但不可能包蕴字段。
类和结构能够持续五个接口。
持续接口时,将三番四次成员定义但不继续完结。
若要落成,类中的对应成员必需是集体的非静态的,并保有同等名称与具名。
接口不带有方法的兑现,接口本身可从四个接口继承。
扬言接口使用 interface 关键字。
接口成员必需是共用的。

显式接口成员贯彻:再次来到类型.接口名.方法名。

抽象类
抽象类重要用来提供四个派生类可分享的的基类的共用定义。
与非抽象类的区分是抽象类不可能实例化,不能被密闭,能够蕴含抽象成员。
扬言时行使 abstract 关键字。
从抽象类派生贰个非抽象类时,必要在非抽象类中重写抽象方法运用 override
关键字。
抽象类和接口的分别有
它们的派生类只好一而再贰个基类,只好一直接轨一个抽象类,但能够持续三个接口。
抽象类能够定义成员贯彻,接口不得以。
抽象类可以分包字段,构造函数,析构函数,静态成员,常量等,接口不得以。
抽象类的积极分子能够是私家的(只要不是虚幻的),受保证的,内部的,但接口成员必需是国有的。
抽象类首要用以做靶子的不可胜计的基类,分享有个别首要特征,举例共同的指标和协会。

接口则重点用以类,那么些类在基础水平上,但还能够成功某个同样的职责。

密封类
密闭类能够用来决定扩大性,倘使密闭了有个别类,则其余成员不能够从该类承袭。
若果密闭了某些成员,则派生类无法重写对该成员的贯彻。
扬言密闭类使用 sealed 关键字
密闭类中无法声称受保证成员要么虚成员受保障成员只好在派生类访问,虚成员只可以在派生类重写。
密闭类不可能声称为架空的。
密闭艺术只能用来对基类的虚方法举办重写,并提供切实落到实处。

故而阐明密闭方法时sealed总和override同期接纳

枚举类型
枚举是由客商定义的数据类型,其基础项目能够是除Char外的别的整形。
借使未有显式表明基础项目,则动用Int32。
枚举是值类型的一种新鲜情势。
枚举类型由名称,基础项目和一组字段组成。
基本功项目必需是叁个放到的整数类型。
字段为静态文本字段,在那之中的每二个字段都意味着常数。
同多个值能够分配给多个字段但不可能不将内部有些值标识为关键枚举值,以便进行反射和字符串调换。
enum 枚举名
{
标记名称=整形数据类型值

}

泛型
泛型的体系参数T能够作为是二个占位符,它不是一种档案的次序,仅表示某种大概的品类。
泛型接口的扬言
interface 接口名<T>

{接口体}

LinQ
在c#3.5中声称变量时,能够不醒目钦点数据类型,使用主要字var来声称。
var number = 2099;
申明var变量要求开端化,不能够为null。

Lambda表明式是三个无名氏函数,他能够饱含表明式和讲话,况兼可用于创制委托或表达式目录树类型。
具有拉姆da表明式都应用拉姆da运算符 => 读作goes to。
运算符侧边是输入参数(倘诺有),左边是表达式或语句块。
拉姆da表明式不可能从密闭措施中捕获ref或out参数。
抓获的变量不会被视作垃圾回收,直到援引变量的委托超出范围截止。

LINQ查询表明式包括8个基本子句。
from            内定数据源和范围变量
select            钦命当前询问时回来的行列中的成分将兼具的门类和格局
group            依照钦赐的键值对查询结果实行分组
where            依据贰个或八个由逻辑&&和||分隔的布尔表达式筛选成分
orderby            基于成分类型的暗许相比较器
join            基于五个钦命相称原则之间的格外相比来连接三个数据源
let            引进多个用来存款和储蓄查询表达式中的子表达式结果的限定变量
into          

 提供多少个标志符,它能够充当对join,group或select子句的援用

File类辅助对文本的基本操作,它包蕴用于创设复制删除移动和开垦文件的静态方法。
Copy            将长存文复制到新文件
Create            在钦定路径创造文件
Delete            删除钦点的文书,一纸空文不吸引那些
Exist            鲜明文件是否留存
Move            将制订文件移动到新岗位,并提供钦定新文件名的采用
Open            张开内定路径上的FileStream
CreateText        创制或展开多个文书用于写入UTF-8编码的公文
GetCreationTime        重返钦点文件或目录的创始日期和时间
GetLastAccessTime    再次回到上次作客钦赐文件或目录的日期和时间
GetLastWriteTime    重回上次写入钦定文件或目录的日子和岁月
OpenRead        张开现存文件以实行读取
OpenText        张开现存UTF-8编码文件以举办读取
OpenWrite        展开现成文件以实行写入
ReadAllBytes      
 打开贰个文件文件,将文件的内容读入一个字节数组,然后破产该文件
ReadAllLins      
 伸开四个文本文件,将文件的全数行读入一个字符串数组,然后关门该公文
ReadAllText      
 展开四个文书文件,将文件的持有剧情读入一个字符串,然后破产该文件
Replace          
 用其余文件的内容替换钦点文件的剧情,进程中剔除原始文本,创制被调换文件背份
SetCreation提姆e        设置成立该公文的日子和岁月
SetLastAccessTime    设置上次访谈文件的日期和时间
SetLastWriteTime    设置上次写入文件的日子和岁月
WriteAllBytes      
 创造一个新文件,将内部写入一个字节数组,然后关门该公文,存在则改写文件
WriteAllLins      
 创造一个新文件,将个中写入二个字符串数组,然后关门该公文,存在则改写文件
WriteAllText      
 创立二个新文件,将中间写入内容,然后停业该文件,要是存在该公文,则改写文件

Fileinfo类仅能够用于实例化的对象。
CreationTime        获取当前FileSystemInfo的创制时间
Directiory        获取父目录实例
DirectioryName        获取表示目录完整路线的字符串
Exists            获取提醒文件是或不是留存的值
Extension        获取表示文件扩张名部分的字符串
FullName        获取目录或文件的欧洲经济共同体目录
IsReadOnly        获取或设置当前文件是不是为只读的值
LastAccessTime        获取或安装上次访谈文件的日子和岁月
LastWriteTime        获取或安装上次写入文件的日子和岁月
Length            获取当前文件大小
Name            获取文件名

Directory类公开了用于成立移动枚举,删除目录和子目录的静态方法
CreateDirectiory    成立内定路径中的全部目录
Delete            删除钦定的目录
Exists            明确内定路径是还是不是援用磁盘上的存活目录
GetCreationTime        获取目录的创办日期和时间
GetDirectiories        获取钦定目录中子目录名称
GetDirectioryRoot    获取内定路径的根音讯,卷音信
GetFiles        再次回到钦定目录中的文件名称
GetFilesSystemEntries    再次回到钦赐目录中的文件和子目录的称号
GetLastAccessTime    重返上次访谈钦命文件或目录的日期和岁月
GetLastWriteTime    重返上次写入钦命文件或目录的日期和时间
GetParent        检索内定路径的父目录,包蕴相对路径和相对路线
Move            将文件或目录及其内容移动到新任务
SetCreationTime        为钦赐的公文或目录设置创造日期和时间
SetDirectiories        将应用程序的当前工作目录设置为钦点的目录
SetLastAccessTime    设置上次会见钦点文件或目录的日期和岁月
SetLastWriteTime    设置上次写入目录的日子和时间

DirectoryInfo类仅能够用于实例化对象
reationTime        获取或安装当前FileSystemInfo的创始时间
Exists            明确钦命目录是不是存在的值
Extension        获取表示文件扩张名部分的字符串
FullName        获取目录或文件的完好目录
LastAccessTime        获取或安装上次做客内定文件或目录的日子和岁月
LastWriteTime        获取或安装上次写入目录的日子和岁月
Name            获取DirectoryInfo文件名
Parent            检索内定子目录的父目录

Root            获取路线的根部分

I/O
.NET Framework使用流来补助读取和写入文件。
开荒人士能够将流视为一组三番五次的一维数据,包蕴早先和最终,况且在那之中的游标提醒了流当前的职位。
在。NET
Framework中,流由Stream类来表示,该类构成了具备其余流的抽象类。
不能创制Stream类的实例,但必需选择它达成有个别I/O流类。

FileStrean类,该类公开以文件为主的的Stream,表示在磁盘上或网络路线上针对文件的流。
贰个FileStrean类实例实际上意味着一个磁盘文件。
CanRead            获取叁个值,提示当前流是不是帮衬读取
CanSeek            获取贰个值,提示当前流是或不是扶助查找
CanTimeout        获取贰个值,明确当前流是不是足以超时
CanWrite        获取三个值,提示当前流是或不是帮衬写入
IsAsync            获取二个值,提醒FileStream是异步依然贰头张开的
Length            获取用字节表示的流的长短
Name            获取传递给构造函数的FileStream的名号
Position        获取或安装此流的脚下岗位
ReadTimeout        获取贰个值,分明当前流在逾期前尝试读取多久
WriteTimeout        获取二个值,分明当前流在逾期前尝试写入多久
BeginRead方法        初步异步读操作
BeginWrite        开端异步写操作
Close            关闭当前流并释放与之提到的保有财富
EndRead            等待挂起的异步读取达成
EndWrite        结束异步写入,在I/O操作完结前直接阻止
Lock            允许读取访谈的还要幸免其余进度改造FileStream
Read            从流中读取字节块并将该多少写入钦赐缓冲区
ReadByte        从文件中读取二个字节,并将读取地点升高贰个字节
Seek            将该流的当下地方设置为钦点值
SetLength        将该流的长度设定为钦点值
Unlock            允许任何进程访谈在此之前锁定的某部文件的任何或局部
Write            使用从缓冲区读取的多少或字节块写入该流
WriteByte        将二个字节写入文件流的脚下岗位

StreamWriter类是专门用来管理文件文件的类,能够一本万利的向文本文件中写入字符串。
再者也承担重大的调换和拍卖向Filestream对象写入的做事。
Encoding属性        获取将输入写入到内部的Encoding
Formatprovider        获取调节格式设置的目的
NewLine            获取或安装由近来TextWriter使用的行终止符字符串
Close方法        关闭当前的StringWriter和底蕴流
Write            写入到StringWriter的此实例中
WriteLine        写入重载参数钦命的一点数据,后跟行截至符

StreamReader类
Close方法        关闭StringReader
Read            读取输入字符串的下多少个字符或下一组字符
ReadBlock      
 从当前流中读取最大的count的字符并从index开端将数据写入Buffer
ReadLine        从基础字符串中读取一行
ReadToEnd        将全方位流或从流的当下地点到流的的末尾作为字符串读取

BinaryWriter类以二进制的款式将基元类型写入流
Close方法        关闭当前的Binary和基本功流
Seek            设置当前流中的地点
Write            将值写入当前流

BinaryReader类使用一定的编码将基元数据类型读作二进制。
Close方法        关闭当前阅读器和基础流
PeekChar        重返下一个可用的字符,而且不升官字节或字符的职位
Read            从基础流中读取字符,并提高流的方今岗位
ReadBoolean      
 从脚下流中读取Boolean值,并使该流的此时此刻职分进步一个字节
ReadByte      
 从当前流中读取下一个字节,并使该流的当下地方进步一个字节
ReadBytes      
 从近年来流元帅Count个字节读入字节数组,并使该流的眼下职分升高Count个字节
ReadChar      
 从流中读取下个字节,并基于Encoding和读取的特定字符提升该流的最近岗位
ReadChars      
 从流中读取Count个字节,并依靠Encoding和读取的特定字符进步该流的此时此刻任务
ReadInt32      
 从当前流中读取4字节有暗号整数,并使该流的当下地点升高4个字节
ReadString      

 从日前流中读取多个字符串,字符串有长度前缀,一次两人的被编码为整数

互连网编制程序
DNS类
GetHostAddress        重返内定主机的IP地址
GetHostByAddress    获取ip地址的DNS音讯主机
GetHostName        获取本地主机名
IPAddress类
IPEndPoint类
Address属性        获取或安装终结点的ip地址
Port属性        获取或设置终结点的端口号
WebClient类
BaseAddress        设置基URL
Encoding        钦点下载字符串的编码格局
OpenRead        获取数据
DownloadFile        将内容保留到文件中
WebReque类
WebResponse类
Socket类
Available属性        获取已从互联网接受可供读取的数据量
Accept方法        为新建连接创立新Socket
BeginAccept        开始八个异步操作来经受一个传开的连年尝试
BeginConnect        早先一个对长途主机连接的异步央求
BeginDisconnect        初步异步伏乞从远程终结点断开连接
BeginReceive        开首从接二连三的Socket中异步接收数据
BeginSend        将数据异步发送到连接的Socket
BeginSendFile        将文件异步发送到连接的Socket
BeginSendTo        向特定远程主机异步发送数据
Close            关闭Socket连接并释放具有财富
Connect            建设构造与长途主机的链接
Disconnect        关闭套接字并允许重用套接字
Receive            接受来自绑定的socket的多寡
Send            将数据发送到连接的Socket
Sendfile        将文件和可选数据异步发送到连接的Socket
SendTo            将数据发送到特定终结点
Shoutdown        禁止使用某Socket上的出殡和接受
TcpClient类
Client属性        获取或安装基础Socket
Connected        获取值提醒是还是不是业已接二连三到长途主机
ReceiveTimeout        等待接受时的时间量
SendTimeout        等待发射成功的时间量
Connect方法        使用钦定的主机名和端口号链接到tcp主机
TCPListener类
UdpClient类
MailMessage类
Attachments属性        获取附属类小部件集结
Bcc            获取收件人地址会集
Body            获取或设置邮件正文
BodyEncoding        获取或设置邮件正文编码
CC            获取抄送给旁人的地点群集
From            获取或设置发件人地址
Headers            获取邮件标头
Priority        获取或安装此邮件优先级
ReplyTo            获取或设置邮件的借尸还魂地址
Sender            获取或安装此邮件发件人
Subject            获取或安装核心行
SubjectEncoding        获取或安装宗旨内容编码
To            获取收件人地址集结
Attachment类
ConntentDisposition属性    获取附属类小部件MiMe内容标头消息
ConntentStream        获取附属类小部件内容流
ConntentType        获取附件内容类型
Name            获取Mine内容类型名称值
NameEncoding        获取用于Name的编码
TransferEncoding    获取或设置附件的编码
CrateAttachmentFromString用字符串创造附属类小部件
SmtpClient类
Credentials        获取或安装用于注脚发件人身份的证据
Host            获取或设置用于SMTP事物的主机名称或ip
Port            获取或设置用于SMTP事物的端口
SevicePoint        获取用于传输电子邮件的互联网连接
Timeout            提示send方法的过期时间
Send          
 将电子邮件发送到SMTP服务器,该方法在传输中会阻止别的操作
SendAsync        发送,该格局不会阻拦调用线程

SendAsyncCancel        撤销异步操作以发送电子邮件

线程
每一种正在操作系统上运行的应用程序都以叁个经过。
二个进程能够包罗贰个或多个线程。
线程是操作性系统一分配配管理器时间的大旨单元。
在顾客使用该线程实例调用Start方法此前,线程都是出生状态。
调用Start方法之后,线程处于就绪状态,得到系统能源后跻身运转状态。
线程步向就绪状态,他就能够在就绪与运作情形碾转。
何况恐怕步入等待,休眠,阻塞,归西情形
跻身运营状态的线程调用Thread类Suspend方法时该线程踏入等待状态。
跻身等待意况的线程必得调用Thread类Resuam方法本领唤起。
当线程调用hread类Sleep方法时该线程步入休眠状态。
若是二个线程在运转境况下发出输入输出央求,该线程将步入阻塞状态。其等待截至时线程步入就绪状态。
对于阻塞线程来讲,就算系统能源空闲,线程依旧无法回来运行境况。
当线程实行完结,线程步入谢世情状。

证明线程Thread thread = new Thrend(new
ThreadStart(不带参方法名,不带括号));
注解线程Thread thread = new Thread(delegate() { GetPort(host, port);
});
运营线程thread.Start();
挂起线程thread.Suspend();
光复线程thread.Resume();
休眠线程Thread.Sleep(一千);
终止线程thread.Abort();
阻止调用线程直至线程终止thread.Join();
线程优先级thread.Priority = ThreadPriority.Highest;

lock语句能够用来保管代码块运营完毕,不会被其他线程终断。
Object thisLock = new Object();
lock (thislock)
{//代码块}
严酷来讲,提须求lock语句的参数只是用来独一标志由八个线程分享的能源,所以能够是率性类实例。
不过,实际上此参数平日表示供给开展协同得能源。

Monitor类通过向单个线程授予对象锁来调节对目的的拜候。
当二个线程具有对象锁时,别的任何线程都不可能得到该锁。
Monltor.Enter(this);//锁定当前线程
Monltor.Exit(this);//释放线程

Mutex类是一路基本单元,它只向一个线程授予对共享财富的独占访谈权。
假设三个线程获取了互斥体,则要博得该互斥体的第二个线程将被挂起,直到第多个线程释放该互斥体。
Mutex mutex = new Mutex(false);
mutex.WaltOne();//协会当前线程

mutex.Release.mutex();//释放对象

收获鼠标在窗体上的岗位
this.labelx.Text = e.X.ToString();
this.labely.Text = e.Y.ToString();

窗体允许拖放文件
窗体load事件中写this.AllowDrop = true;设置窗体允许拖放
窗体DragEnter事件中写
if(e.data.GetDataPresent(Data.Fornats.FileDrop))
{
    string[] files =
(string[])e.Data.GetData(DataFormats.FileDrop);
}

相关文章