2016年8月28日 星期日

C# Winform 跨執行緒控制項作業 ( Cross thread UI Update)

當執行Windows Form程式和WPF 等UI form程式時

很常遇到 "跨執行緒作業無效: 存取控制項'ListItem'  " 類似的問題。


以下是理解後的說明:
1. 主控制項的執行緒不允許給子執行緒做存取,這會違反設計模式的封裝架構

2. 在編譯時能正常通過,表示微軟有提供可以走後門的方式Cross thread ui 程式碼如下:
Form.CheckForIllegalCrossThreadCalls = false; 

3. 一個符合安全的設計模式的跨執行緒程式碼如下:
        private void SetReturnValueCallbackFun(ref ListViewItem node, ExchangeData Data)
        {
            try
            {

                if (this.AllInfomation_listView_Service.InvokeRequired)
                {
                    this.AllInfomation_listView_Service.BeginInvoke((MethodInvoker)delegate () { this.AllInfomation_listView_Service.Items[0].SubItems[3].Text = Data.Text; ; });
                }
                else
                {
                    this.AllInfomation_listView_Service.Items[0].SubItems[3].Text = Data.Text;
                }
                //  AllInfomation_listView_Service.Items[0].SubItems[4].Text = Data.Text;
            }
            catch (Exception ex)
            {

            }

        }


當if (this.AllInfomation_listView_Service.InvokeRequired) 為true 時,表示不同執行緒,要透過委派的方式更新主執行緒的控制項資料。
否則當然就是同個執行緒所以可以執行存取控制項的值
※這是屬於匿名委派

4.以下是我的參考資料連結:

2016年8月4日 星期四

C# windows Form 程式使用SQLite ORM技術


範例檔案:下載
使用程式: Visual Studio 2015

如何在Windows Form 底下進行Sqlite 的ORM操作,以下是範例:


1.  建立一個Windows Form C#的專案程式。


2. 接著對專案按下滑鼠右鍵 -> NuGet 套件



3. 安裝 Sqlite-net 版本隨意。


4. 安裝完成後會發現多了 : SQLite.cs 與 SQLiteAsync.cs 兩個檔案,這兩個檔案就是ORM的函式庫。


5. 建立一個類別 ※可以參考範例檔案

6. 如下圖,我們已經可以進行SQLite ORM的 CreateTable<Class>() 操作


7. 進行編譯後 , 我們的123.db 檔案就產生了~ ,而且裡面有我們建立的表格。