[.NET Concept]盡量避免在另一個執行緒觸發事件或委派
記得在之前工作時跟其它部門的同仁做過一次程式的整合,所提供的組件需要指定一個委派,當組件有資料需要處理時會透過指定的委派告知,整合完後拿去給界面使用,卻意外的被處理界面的同事告知出現了跨執行緒作業無效的問題。原來在該組件中有開另一個執行緒去接收資料,收到資料後直接透過委派告知,我程式中委派的動作跟著被帶到另一個執行緒,間接產生了這個不被我注意到的問題。 ...
記得在之前工作時跟其它部門的同仁做過一次程式的整合,所提供的組件需要指定一個委派,當組件有資料需要處理時會透過指定的委派告知,整合完後拿去給界面使用,卻意外的被處理界面的同事告知出現了跨執行緒作業無效的問題。原來在該組件中有開另一個執行緒去接收資料,收到資料後直接透過委派告知,我程式中委派的動作跟著被帶到另一個執行緒,間接產生了這個不被我注意到的問題。 ...
在撰寫程式時,最常撰寫的成員型態應該就屬集合與字串這兩種,很多開發人員對這兩種回傳型態的屬性與方法並未特別的注意,因兩種型態都是參考型態別,有時在實作上直接把null回傳出去。其實當回傳型態為這兩種型態時,我們應避免直接以null當作回傳的值,而是應該回傳空的字串或是空的集合。像是: class Person { #region Var private string _name; private IEnumerable creditCards; #endregion #region Property public string Name { get { if ( null) return string.Empty; return _name; } } public IEnumerable CreditCards { get { if (_creditCards == null) return new CreditCard[0]; return _creditCards; } } #endregion } 這是個很簡單卻也很重要的撰寫概念,若在撰寫時能遵照此概念,如此使用者不會混淆於哪些成員屬性與方法可能為null,在使用上也可直接用字串長度或是集合的元素數量直接判斷是否為空值,而不需事先判斷是否為null,因此程式撰寫會變得簡潔,可讀性跟著提升,間接的也減少了NullReferenceException發生的機率。 這概念在MSDN的陣列用法方針這篇也有提到 在.Net Framework中也隨處可見此概念的實現,稍有留心就能參透此概念。有興趣的可以嚐試看看.Net Framework BCL中的集合與字串型態成員是否都可以直接判斷空值,是否不需判斷是否為null。 ...
在.NET 4.0 New Feature - Generic Lazy class中介紹過.NET 4.0提供的好用的Lazy類別,能輕鬆的讓我們做物件的初始動作,但在.NET 4.0以前想要使用類似的類別呢?好在筆者在.NET 4.0的修練中有大約的知道簡易的實作概念,這邊將其概念加以延伸,稍微花了一點時間整理成自己的Lazy類別便於後續使用。 ...
RSS訂閱資訊是透過XML技術實現的,其XML格式欄位對應可參閱RSS 2.0 at Harvard Law這網站。 ...
要從土豆往上截取影集資料,我們可先參閱頻道劇集查詢,該API的URL位置會像下面這樣: ...
續[C#]取得檔案對應的MIME Content Type這篇,這次反過來若是想知道MIME Content Type對應到的副檔名有哪些的話,一樣我們可以從登錄檔中取得,像是下面這樣: private static IEnumerable GetMIMESupportedExt(string mime) { var linq = from item in Microsoft.Win32.Registry.ClassesRoot.GetSubKeyNames() let key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(item) let value = key.GetValue(“Content Type”) where value != null && value.ToString().Equals(mime, StringComparison.CurrentCultureIgnoreCase) select item; return linq; } ...
101 Async Sample in C# and Visual Basic是用Silverlight技術所架構的非同步程式範例網站。 ...
在寫Youtube的上傳時,在設定上傳的資訊中有一項是Content Type,該屬性是字串型態,且未提供我們列舉直接選取或是自動由檔案名稱判別的功能,在這邊被卡關了許久,最後下才發現這邊的Content Type指的是MIME Content Type。而要取得檔案對應的MIME Content Type,其實並不困難,因為這樣的資訊都已經存在登錄檔中了,我們可以從登錄檔中的資訊下手,只要會用程式擷取出登錄檔資訊就可以取得檔案對應的MIME Content Type。 ...
今天再調整程式中的事件,又注意到C#的事件實在是很囉唆,每次觸發事件前都要判斷一下事件處理常式是否有繫上,有繫上才能做觸發的動作。這樣的檢查動作隨著事件的增多,重複撰寫相同的邏輯會變得非常的頻繁。而在VB.NET中事件的觸發相較之下就容易得多,不需要自行判斷事件處理常式是否繫上,直接叫用RaiseEvent觸發事件就可以了。因此想說是否可以把這部分工作提出來,試了一下提出來後仍舊運行良好,這邊將其整理成擴充方法: ...
這邊記錄ㄧ下要如何取得檔案內容中的詳細資料 … ...