2016寒假自學筆記

来源:http://www.cnblogs.com/Aaxuan/archive/2017/02/20/6420745.html
-Advertisement-
Play Games

寒假在家無聊,找了一本還不錯的電子書來學習, 一是複習了以前最初學的一些基本類, 二是學一些那時候老師沒有教的東西, 看的書是pdf的所以下麵全部都是手打出來的,有什麼錯誤在所難免。 其實一個寒假只看了這麼一點還是很懶惰的。 放上來以後自己好查。以後空閑了還可以看看。 快捷鍵 Ctrl + Ente ...


寒假在家無聊,找了一本還不錯的電子書來學習,

一是複習了以前最初學的一些基本類,

二是學一些那時候老師沒有教的東西,

看的書是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 + R + 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"}
聲明一個兩行兩列二維數組
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表達式是一個匿名函數,他可以包含表達式和語句,並且可用於創建委托或表達式目錄樹類型。
所有Lambda表達式都使用Lambda運算符 => 讀作goes to。
運算符左邊是輸入參數(如果有),右邊是表達式或語句塊。
Lambda表達式無法從封閉方法中捕獲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            用其他文件的內容替換指定文件的內容,過程中刪除原始文件,創建被替換文件背份
SetCreationTime        設置創建該文件的日期和時間
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(1000);
終止線程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);
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第十四節 用戶管理初級(上) 標簽(空格分隔): Linux實戰教學筆記 陳思齊 [更多資料點我查看][1] 1,賬號管理 1.1 管理用戶命令彙總 |命令|註釋說明(特殊顏色的必須掌握)| | | | |useradd增| | |userdel刪| | |passwd| | |chage| | | ...
  • 假設在win(192.168.0.101)上安裝了xmanager,想接收來自linux(192.168.100.16)的圖形界面。 1.在win端打開Xmanager - Passive 2.在linux上設置DISPLAY環境變數 export DISPLAY=192.168.0.101:0.0... ...
  • 1、AWK內部代碼編寫(為了更好的理解) 2、去掉回車,加上其他部分 目的:要查看當前目錄中大於4kB的文件的,並將其大小相加求出總大小。 3、查看當前目錄大於4Kb的文件 4、AWK常用參數 -F(表示已什麼為分隔符) 目的:查看nologin用戶 grep查看以nologin結尾的行,AWK查詢 ...
  • misc子系統在Linux中是一個非常簡單的子系統,但是其清晰的框架結構非常適合用來研究設備識別模型。本文從misc子系統的使用出發,通過瞭解其機制來總結一套的設備識別的驅動框架,即使用 使用同一個驅動,向上提供多個設備文件介面,向下控制多個(相應的)設備 ,這就需要該驅動可以根據不同的設備文件來控 ...
  • public class XmlUtility { /// <summary> /// 反序列化.接收2個參數:xmlFilePath(需要反序列化的XML文件的絕對路徑),type(反序列化XML為哪種對象類型) /// </summary> /// <param name="xmlFilePat ...
  • 下麵是視頻教程的提綱: PPT版本的提綱下載 本節源碼下載 XAF框架開發教程 快速實現企業級信息系統開發的利器 XAF簡介 ´ 開發公司:www.devexpress.com,老牌控制項公司 ´ 從2006年發佈第一個XAF版本,至今11年 ´ 基於Microsoft.Net Framework ´ ...
  • 什麼是NuGet? [NuGet][](讀作New Get)是用於微軟.NET開發平臺的軟體包管理器,是一個Visual Studio的擴展。在使用Visual Studio開發基於.NET Framework的應用時,NuGet能夠令你在項目中添加、移除和更新引用的工作變得更加快捷方便。 通過Nu ...
  • 一.認識Redis1. Redis 是一個高性能的key-value資料庫。 2. 它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。 3.周期性的把更新的數據寫入磁碟或者把修改操作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...