發表文章

目前顯示的是有「C#」標籤的文章

不要自動完成 { }

圖片
每次寫程式 Visual Studio 都會自動加 { },但是加完就不會自動排版了,所以每次都還要刪掉再重加一次,以便完成排版。 今天找了好久,終於找到取消的設定了

執行緒安全 (Thread-safe)

圖片
現代程式設計為了提升效能,通常採用多執行緒的方式執行,但若沒有注意執行緒安全,往往會造成意想不到的錯誤。 假設現在有一個程式有 Main & Timer 兩個 Thread 都會透過 i2c command 存取硬體,模擬的程式碼如下:

在 C# 中使用 VB.NET 的 InputBox

有時想要偷懶一下,想用 InpubBox 取得輸入的字串,偏偏在 C# 下又沒有這樣的功能。 但是,沒想到在 .NET 平台下,這麼容易就解決了 using Microsoft.VisualBasic; // 加入參考 Interaction.InputBox(...); // 歡迎取用 參考: C#中使用VB.NET的InputBox 不過如果是要選取檔案的話,可以考慮用 OpenFileDialog 喔

DataGrid + DataList 套用主從式資料的顯示方式

在 .net 平台分散式應用程式 (3) - ASP.NET 網頁設計技巧 (文章編號:N021201102) 文章中,在 DataSet 中建立關聯式的資料表,並分別套用到 DataGrid 與內層的 DataList。 其中外層的 DataGrid 可直接利用 Eval 繫結相關的資料欄位,但在內層的 DataList 卻行不通。 原因在於 DatList 的資料來源是利用 DataRow.GetChildRows(DataRelation) 取回的 DataRow[] 陣列 (該函式是從父階 DataRow 取得所有關聯子階的 DataRow) 所以繫結必須先做型別轉換才可以 <%# ((System.Data.DataRow)Container.DataItem)["Author"] %> 或者這種方式也可以 <%# (Container.DataItem as System.Data.DataRow)["Author"] %>

如何取得 struct size

struct MyStruct { ... }; 在 C++ 時代,我們可以用 sizeof(MyStruct) [StructLayout(LayoutKind.Sequential)] struct MyStruct { ... }; 在 C# 時代,我們必需宣告變數實體才能取得其大小 MyStruct myStruct = new MyStruct(); int iSize = Marshal.SizeOf(myStruct); 後來發現利用 typeof 運算子也可以達到相同的效果 int iSize = Marshal.SizeOf(typeof(MyStruct));

如何開發 Windows Mobile 應用程式

圖片
這次的目的是想寫一個利用 GPS 記錄旅程軌跡的程式 (騎腳踏車、出外郊遊、旅行都可以用),如果可以把資料轉到 Google Map 上標示就更好了,也許將來可以將這些資料寫入照片的 EXIF,那相片地圖就省事多了 (兩邊做時間比對,不過一開始要先校正),不過問題應該是電池的續航力吧! 總之,先踏出第一步吧!

C# 列舉型別的位元旗標

C# 的列舉型別加上 [Flags] 屬性後,就可以做位元運算,真是太神奇了 [Flags] enum Days2 { None = 0x0, Sunday = 0x1, Monday = 0x2, Tuesday = 0x4, Wednesday = 0x8, Thursday = 0x10, Friday = 0x20, Saturday = 0x40 } class MyClass { Days2 meetingDays = Days2.Tuesday | Days2.Thursday; }   參考: 列舉型別 (C# 程式設計手冊)

myADL

為了避免 ADL 改版時,要將之前寫好的程式再改一次,因此想將自己寫好的程式從 ADL 中獨立出來。 原本是想用繼承的方式,但 ADL 為 static class ,無法繼承,死路一條。 後來發現 partial class 可以達成我的目的,只要將原本的 ADL class 加上 partial 關鍵字 ,而我自己寫的程式 (放在另外獨立的檔案) 也加上 partial 關鍵字,編譯時就可以合成一個 class 了。讚!

C# 傳遞參數的方式

前置詞 說明 Call by Value ref Call by Reference, Input and Output out Call by Reference, Output only

從 WPF 呼叫 NVAPI & ADL

WPF 使用 C# ,是屬於 Managed Code 而 NVAPI & ADL 是使用 C/C++ ,屬於 Unmanaged Code 所以必須透過橋樑來處理 第一步: 由 Using Unmanaged code and assembler in C# 知道 C# 可以透過 DllImport 來呼叫 DLL 中的 Function ,不過糟糕的是 NVAPI 是採用 Static Lib Link ,我們要使用的 Function 並沒有 Export 出來,因此折衷的辦法是在 NVAPI 外面再包一層 DLL ,然後將我們需要的 Function Export 出來給 C# 呼叫 ( 先試著直接呼叫,等比較熟後看是包成自訂控制項或其它方式 ) PS : 字串的處理記得在 DllImport 中設定 CharSet 的參數,否則 ANSI 與 UNICODE 未設定正確將產生錯誤 偵錯工具類型要設為 "混合",否則在 Managed Project 中無法偵錯 Unmanaged code NVAPI 採用 __cdecl、而 C# DllImport 預設是採用 __stdcall。我們的 DLL 是採用 Static Link 的方式呼叫 NVAPI,所以沒問題;但 C# 是用 Dynamic Link 方式呼叫 DLL,所以兩邊的 Calling Convention 必須一致,否則會產生堆疊錯誤。因此我們包的 DLL 要沿用 NVAPI 採用 __cdecl?還是配合 C# 採用 __stdcall 呢?暨然是 DLL,還是照慣例用 __stdcall 吧 Calling Convention cdecl 參數由右到左放入堆疊、呼叫端清除 (C/C++) MFC stdcall 由右到左、自行清除 (Win32) DLL pascal 由左到右、自行清除 (VC++2.0 & Win16) Borland Delphi fastcall 由左到右、自行清除 ( 前三個參數 EAX, EDX, ECX 剩下才放 Stack) Microsoft fastc...