Time of Update: 2018-12-07
.net 的非同步編程技術主要分為兩個塊:1、使用IAsyncResult 的非同步編程模式。2、基於事件的非同步編程模式。 C#編譯器會為每個委託產生支援非同步執行的 BeginInvoke / EndInvoke 方法,從而將委託和非同步編程緊密聯絡起來了。 當同步執行程式時,如果執行到需要執行較長時間的代碼時,使用者必須等待,也會認為程式已經卡死或死機了。同步程式的範例程式碼如下:namespace CalculateFolderSizeNoAsync{class Program {
Time of Update: 2018-12-07
關於 TextBlock 中 文本的換行:1、使用前台XAML控制。2、使用後台代碼控制。<TextBlock x:Name="text" Height="124" Margin="99,35,235,0" VerticalAlignment="Top" TextWrapping="Wrap"><Run Foreground="#FF246300" Text="- Hello World! "/><LineBreak/><Run Text="
Time of Update: 2018-12-07
WPF使用XAML來描述使用者介面,每個XAML元素往往對應著相應的WPF對象,元素的屬性對應著對象的屬性。由於XAML元素與WPF對象之前存在著這種對應關係,其實可以將XAML代碼看成是WPF對象“序列化”後的結果。WPF提供了XamlWriter 和 XamlReader 兩個類實現WPF對象的XAML序列化和還原序列化。 樣本項目:展示了一個繪圖板,使用者用滑鼠點擊此繪圖板,程式將以隨機顏色和大小繪製一個矩形,點擊“儲存”按鈕,當前圖形將被儲存到磁碟上一個名為“PicData.dat”
Time of Update: 2018-12-07
前面說到,我們可以使用 IComparer<T> 和 IComparable<T> 介面比較兩個對象,然後對該類型的對象列表排序。現在我們來介紹另兩個委託可以來用排序和搜尋列表先總結一下前面的內容:MSDN上List有如下的sort重載:如果調用無參的sort()方法,那麼要求集合中的元素要實現 System.IComparable
Time of Update: 2018-12-07
上一節日記中,項目所展示的非同步編程模式到底是怎麼實現的?上一節代碼中定義了一個委託:public delegate long CalculateFolderSizeDelegate(string FolderName);經過編譯器,在編譯上述委託語句時,會自動產生以下的類模板: public sealed class CalculateFolderSizeDelegate: System.MulticastDelegate{ public
Time of Update: 2018-12-07
文章目錄 摘要 目錄 摘要作為.NET架構最重要的組件之一,ADO.NET扮演著應用程式與資料互動的重要的角色。本文將從宏觀的角度來探討ADO.NET,和大家一起瞭解ADO.NET來龍去脈以及ADO.NET的主要組成部分。 目錄什麼是ADO.NET?理清ADO.NET與ADO的關係認識ADO.NET最核心的組成部分ADO.NET擴充 1. 什麼是ADO.NET?
Time of Update: 2018-12-07
本文內容包括:使用.NET 4.0 新增的介面:1、比較兩個數組是否相等2、比較兩個數組大小。 在.NET 4.0中我們將看到數組方面有很大的改進,本文將給大家討論的是.NET 4.0數組的新增功能,希望對大家用好.NET 4.0數組有所協助。1 兩數組是否“相等”?在實際開發中,有時我們需要比對兩個數組是否擁有一致的元素,例如,以下兩個數組由於擁有相同的元素,因此被認為是相等的:int[] arr1 = new int[] { 1,2,3,4 }; int[] arr2 = new
Time of Update: 2018-12-07
當程式啟動一個非同步呼叫之後,調用者線程必須有一種方法能知道此調用的執行情況,並且在這一調用執行完畢之後,取回執行結果。可以有以下二種方法:一、使用輪詢現在我們來改造上一節的樣本程式。我們可以在程式執行非同步呼叫的過程中,讓電腦每隔一段時間向控制台輸出一個小點,告訴使用者搜尋工作進行中中,從而可以大大改善程式的方便使用性。樣本程式:namespace AsyncCalculateFolderSize2{class Program {//計算指定檔案夾的總容量 private
Time of Update: 2018-12-07
Predicate<T>委託在.NET類類庫中經常出現,此委託的定義如下:public delegatebool Predicate<T>(T obj);從其定義可以看到,此委託引用一個返回bool 值的方法,在實際開發中,通常使用Predicate<T>委託變數引用一個“判斷條件函數”,在判斷條件函數內部書寫代碼錶明函數參數所引用的對象應滿足的條件,條件滿足時,函數返回true. 在類庫中,List<T> 裡面的 Find方法,
Time of Update: 2018-12-07
1、控制項的 ItemsSource 和 Items 的區別: ItemsSource 只是繼承於 IEnumerable 介面 , 只是一個介面而已,所以在構造初期是不會被執行個體化的。 Items: Items是一個 ItemCollection ,是一個實際的一個容器,所以在執行個體化時是有值的。 所以在使用的時候,如果我們的後台資料是在運行時才準備的話,就使用 ItemsSource ,
Time of Update: 2018-12-07
1、silverlight 中的button 是沒有 MouseLeftButtonDown 和 MouseLeftButtonUp 事件 的。因為SL在ButtonBase類中,已經將這兩個事件的 e.Hanlder 設為ture了。所以不會引用這兩個事件,如果要使用單擊事件,請使用 Click2、button 模板中的ContentPresentation 可以裝載一個容器,容器內可以裝載任何的控制項。所以用以下代碼來表現一個button裡面的內容<Button
Time of Update: 2018-12-07
應用序列化技術的一個典型開發情境就是儲存應用程式的目前狀態,它允許使用者暫時中斷當前的工作,關閉程式退出,下次重新啟動程式時自動回復上次的工作狀態。 樣本:儲存表單顏色和位置的對象:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;namespace SaveFormStatus{ [Serializable]public class
Time of Update: 2018-12-07
轉自http://www.cnblogs.com/anytao/archive/2009/04/12/anytao_devstory_03_customcomparison.html 對集合元素進行排序是經常發生的事情,事實上大部分的集合類型都預設實現了Sort方法,進行其元素的排序操作。例如List<T>集合的Sort方法有:public void Sort();public void Sort(Comparison<T> comparison);public
Time of Update: 2018-12-07
本文涉及:1.對列表中的元素進行“批量類型轉換”2.對列表中每個元素的“加工”3.對列表元素的排序4.檢測列表中的元素是否滿足某個條件5.在列表中尋找元素註:上述的操作並不是針對數組,或者List..而是有通用性,一般實現了IEnumerable<T>介面的列表都可具有下面的方法。 一、對列表中的元素進行“批量類型轉換”在某些情況下可能會需要將列表中的所有元素轉換為另一個類型,這個工作可以通過調用 ConvertAll 方法實現。public List<TOutput>
Time of Update: 2018-12-07
在上一樣本中,如果使用者輸入了一個不存在的檔案夾,會直接拋異常,那麼在非同步中,如果出現異常了,是什麼機制來處理的呢。由於發生異常的代碼與調用代碼位於同一個線程中,因此當異常發生時,電腦會中當前線程的執行流程,轉去執行異常處理代碼。如果異常是在非同步呼叫的過程中拋出的,調用者線程與執行非同步呼叫 的線程不是同一個,那又該怎樣處理?1、當一個非同步呼叫的方法拋出一個異常,CLR會捕獲它,當啟動非同步呼叫的線程(稱為調用者線程)調用 EndInvoke
Time of Update: 2018-12-07
inner join on,full outer join,left join on,right jion on1.inner join on 內部串連 兩表都滿足的組合2.full outer 全連 兩表相同的組合在一起,A表有,B表沒有的資料(顯示為null),同樣B表有,A表沒有的顯示為(null)3.A表 left join B表 左連,以A表為基礎,A表的全部資料,B表有的組合。沒有的為null4.A表 right join B表
Time of Update: 2018-12-07
在.net 基底類型庫中,有一些現有的組件直接實現了 IAsyncResult 非同步呼叫設計模式,這些組件通常同時提供某個方法的同步與非同步呼叫形式。 以system.net 命名空間中的 WebRequest 為例,如所示:有以下規律。1.凡有一個 "BeginXXX"的,一定有一個"EndXXX"方法相對應。2.每組"BeginXXX / EndXXX",一定有一個對應的 "XXX"方法。3."EndXXX" 方法與對應的同步方法
Time of Update: 2018-12-07
前一個日記介紹了以 WebResponse 為代表的支援IAsyncResult 非同步呼叫模式的組件,.NET基底類別庫中有部分組件實現 了另一種非同步模式,這就是"事件架構非同步模式(EAP模式)"。 實現 了EAP模式的最典型組件是WebClient。WebClient定義了以下兩個同步方法用於從WEB上下載檔案:public void DownloadFile(string address, string fileName);public void DownloadFile(Uri
Time of Update: 2018-12-07
來一張UML圖。可以看到各個布局都是繼承於 FrameWorkElement 。可以看到有的布局是繼承於 Panel ,有的是繼承於Control , 有的是直接繼承於FrameWorkElement。–Panel: Grid, Canvas, StackPanel 等等–FrameworkElement: Border, ContentPresenter–Control: ContentControl 1、繼承於Panel 的版面配置容器是可以容納多個Child 孩子的,都有一些布局功能的。
Time of Update: 2018-12-07
先來一張UML圖 最簡單的來說,UserControl 是Control 的一個子類。但是在實際應用中,它們會給平等的對待。有時候我們的Control會讓它直接繼承 Control這個類,有的時候會直接繼承於UserControl 這個類。 區別:1、UserControl 它實際上是已有控制項的組合(textbox , button ....),它的功能是做組合; 而Control 主要是做功能,就是做一些有獨特功能的控制項。2、UserControl