1. 程式人生 > 其它 >C# 學習細節記錄

C# 學習細節記錄

一、Form 窗體使用

使用 form 做為執行時間長的方法時,阻止使用者操作時使用 模態對話方塊

  Show() 非模態對話方塊

  ShowDialog() 模態對話方塊

  Form.Dispose() 方法容易出現閃黑屏的情況

  Form.Close() 方法不會

二、跨執行緒操作窗體

  需要通過委託來實現

  1、 匿名方法,

  官方介紹:delegate運算子建立一個可以轉換為委託型別的匿名方法:

  Func<int, int, int> sum = delegate (int a, int b) { return a + b; };

  2、lambda表示式

  Func<int, int, int> sum = (a, b) => a + b;

  3、使用delegate運算子時,可以省略引數列表。 如果這樣做,可以將建立的匿名方法轉換為具有任何引數列表的委託型別,如以下示例所示:

  Action greet = delegate { Console.WriteLine("Hello!"); };

  greet();

  Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };

  introduce(42, 2.7);

 1 例子:
 2 第一種方法:
 3       private delegate void Mydele(int a);
 4         Mydele mydele;
 5         void run(int a)
 6         {
 7             mydele = run;
 8             if(this.InvokeRequired)
 9             {
10                 this.Invoke(mydele, a);
11             }
12             else
13             {
14 //run的程式碼 15 this.Text = a.ToString();//必須在這加上要跑的程式碼,否則沒用 16 } 17 } 18 第二種方法: 19 void run(int a) 20 { 21 this.Invoke((Action)delegate { this.Text = a.ToString(); }); 22 23 } 24 25      void run(int a) 26 { 27 this.Invoke((Action<int>)delegate(int ab) { this.Text = a.ToString(); },a); 28 } 29 30      void run(int a) 31 { 32 this.Invoke((Action)(() =>{ this.Text = a.ToString(); })); 33 } 34 35     void run(int a) 36 { 37 this.Invoke((Action<int>)((aa) =>{ this.Text = a.ToString(); }),a); 38 }