C#介面程式設計
C#介面設計
常用的視窗控制元件屬性如下:
Name屬性:每一個控制元件都有一個Name(名字)屬性,在應用程式中,可通過此屬性來引用這個控制元件。C#會給每個新新增的控制元件指定一個預設名。在應用程式設計中,可根據需要將控制元件的預設名字改成更有實際代表意義的名字。自己的理解:Name就相當於MFC的ID
Anchor屬性: Anchor的意思是“錨”,那麼Anchor屬性是用來確定此控制元件與其容器控制元件的固定關係的。當父控制元件的位置、大小變化時,子控制元件按照什麼樣的原則改變其位置、大小。Anchor屬性就用於設定此原則。
常用的視窗控制元件
1、文字框控制元件:
常用的方法:
(1)Clear方法:用於清除文字框中已有的文字。
(2)AppendText方法:用於文字框最後追加文字。
窗體方法
1、publicbool IsDisposed { get; }
獲取一個值,該值指示控制元件是否已經被釋放。如果控制元件已經被釋放,則為 true;否則為 false。
2、窗體的InitializeComponent()函式為控制元件的一些初始化工作
簡介:
1、DoWork事件是在後臺執行緒中執行的,所以在該事件中不能夠操作使用者介面的內容,如果需要更新使用者介面,可以使用ProgressChanged事件及RunWorkCompleted事件來實現。對於需要長時間操作而不需要使用者長時間等待的情況可以使用這個類。
2、BackgroundWorker在內部封裝了執行緒
3、當你執行的任務較簡單,不需要複雜控制時使用BackgroundWorker,較為方便;當你要執行的任務需要複雜控制(如執行緒同步)時,要自己建立執行緒.
4、BackgroundWorker就是一個高階控制元件,方便使用Thread,後者是前者的靈魂或基礎,直接使用後者難度稍大,但換來的是靈活方便
BackgroundWorker類中主要用到的有如下屬性、方法和事件:
重要事件:
1、DoWork——void DoWork(object
1.當執行BackgroundWorker.RunWorkerAsync方法時會觸發DoWork事件,如果你呼叫的是有參型別的RunWorkerAsync,則DoWork事件處理程式的第二個引數e的Argment屬性將會返回一個指向你傳遞過來的這個引數。如果後臺操作已在執行,若再次呼叫 RunWorkerAsync 將引發InvalidOperationException異常。
2.在處理DoWork事件的函式中檢測BackgroundWorker.CancellationPending屬性是否為true,如果檢測到是true,則表示使用者已經取消了非同步呼叫,此時程式設計者需將DoWorkEventArgs.Cancel屬性設為true(傳遞給處理DoWork事件的函式的第二個引數),這樣當退出非同步呼叫的時候,可以讓處理RunWorkerCompleted事件的函式知道是正常退出還是中途退出。
3.在DoWork事件結束之前,可將後臺執行緒產生的結果資料賦給DoWorkEventArgs.Result而在RunWorkerCompleted事件中呼叫RunWorkerCompletedEventArgs.Result屬性取得後臺執行緒產生的結果。
4.通過BackgroundWorker.ReportProgress(int)方法觸發下面的ProgressChanged事件,並且傳遞ProgressChangedEventArgs,其中包含了處理的百分比,這個引數在UI介面上設定progressbar控制元件。
2、ProgressChanged——操作處理中獲得的處理狀態變化,呼叫 ReportProgress 時發生.
void UpdateProgress(object sender, ProgressChangedEventArgs e)
3、RunWorkerCompleted——非同步操作完成或中途終止會觸發該事件。(當後臺操作完成以後,無論是completed 還是cancelled,則RunWorkerCompleted 事件被觸發,通過此方法可以將後臺操作的完成結果反饋給使用者)
void CompletedWork(object sender, RunWorkerCompletedEventArgs e)
重要屬性(通過MyBackgroundWorker呼叫檢視):
1、CancellationPending 獲取一個值,指示應用程式是否已請求取消後臺操作。通過在DoWork事件中判斷CancellationPending屬性可以認定是否需要取消後臺操作(也就是結束執行緒);
2、 IsBusy 獲取一個值,指示 BackgroundWorker 是否正在執行非同步操作。程式中使用IsBusy屬性用來確定後臺操作是否正在使用中;
3、WorkerReportsProgress 獲取或設定一個值,該值指示BackgroundWorker能否報告進度更新。
4、WorkerSupportsCancellation 獲取或設定一個值,該值指示 BackgroundWorker 是否支援非同步取消。設定WorkerSupportsCancellation為true使得程式可以呼叫CancelAsync方法提交終止掛起的後臺操作的請求;
重要方法:(通過MyBackgroundWorker呼叫):
1、RunWorkerAsync() //有兩個過載 開始執行後臺操作
2、CancelAsync() 請求取消掛起的後臺操作
3、ReportProgress()//有兩個過載 引發ProgressChanged事件
注意:如果需要提前終止執行後臺操作,可以呼叫BackgroundWorker.CancelAsync方法。
綜上:
1、我們只需呼叫MyBackgroundWorker.RunWorkerAsync()就可以程式就會執行Dowork事件,若Dowork事件中呼叫了MyBackgroundWorker.ReportProgress()函式,則上面的ProgressChanged事件就會執行,而RunWorkerCompleted是在完成後臺程序後程序一定會自動執行的。
2、C#的Tread、BackgroundWorker、事件其實都是開出新的執行緒來做某件事,所以當系統相應某件事(或某個控制元件時)可以同時去相應其他事件而不會出現卡頓的現象,所以在平時的程式設計中要注意對於耗時的操作需要在新開的執行緒中做。(主執行緒如何讓子執行緒獲得時間片段)
注意事項
1、若使用者需要在窗體裝載計算機記憶體時執行某些操作和資料處理功能,應將程式寫在窗體的Form_Load()事件中。
2、想讓某個視窗載入時執行某些初始化操作只需在視窗介面雙擊即可新增事件處理程式。
private void Form1_Load(object sender, EventArgs e),或直接在屬性的行為欄新增。
注:由於筆者水平有限,若博文中存在錯誤或不周之處,還望各位多多指教,有新的經驗的時候也會及時更新本博文。