[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

為啥會有這篇呢...因為最近寫太多C# 突然發現Lambda對程式碼減化太有幫助了=...=
為了怕哪天老人癡呆忘了這些噁心的花式寫法,就開一篇Blog文紀錄了

以前在寫多線程,可能得這麼寫:
void Func() {/*多線程要做的事情*/}

//接著呼叫:
Thread nThread = new Thread(Func);
nThread.Start();

但今天用Lambda可以改寫:
Thread nThread = new Thread(() => {/*多線程要做的事情*/});
nThread.Start();

甚至在噁心點寫的寫法:
new Thread(() => {/*多線程要做的事情*/}).Start();
簡單來說Lambda的形式可拆解成: ()是指你的函數參數列、然後可用=>代表你要接的Lambda陳述句/塊,最後用{}把事情包起來。 在來就是比較討厭的C#內要做跨UI線程操控UI上物件,會有跨UI安全性線程問題, 所以一般會額外寫個委派函數,然後請求UI Thread去處理這個委派函數請求,才能控制 這樣往往可能只用一兩次的委派函數,卻要占用一個篇幅去寫委派函數
先看看正常的跨UI委派寫法:
   private delegate void nCallback(string ContentText); 
    public void n(string ContentText)
    {
        if (this.InvokeRequired)
        {
            nCallback obj = new nCallback(n);
            this.Invoke(obj, new object[] { ContentText });
            return;
        }
        this.Text = ContentText;
    }
    //調用時呼叫n("str")


就可以改寫成:
this.Invoke(new Action(() => { this.Text = "Str"; })); 


又因為=>後面可接陳述塊或者陳述句,所以可以寫這樣:
this.Invoke(new Action(() => this.Text = "Str" )); 

留言

張貼留言

這個網誌中的熱門文章

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持

重建天堂之門:從 32 位元地獄一路打回天堂聖地(上)深度逆向工程 WOW64 設計