顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2014年8月5日 星期二

在多層巢狀Container控制項的結構中無法正確resize

  • 如果設計的WinForm包含多層container的結構(例如: 一個tab container裡面加了另一個tab container, 然後裡面又包含其他panels等等...),有可能在resize 這個WinForm的同時造成畫面縮放混亂(例如:無法正確執行Panel的Anchor、Dock行為,或者是畫面字體縮成一團等問題),這是一個windows的bug,當container再resize的當下如果本機資源不足或者Kernel的stack空間資源用完才會造成的問題,因此不一定每次都會發生。

image

  • 解決方法:再Parent container或是WinForm要複寫 base.OnSizeChanged()方法去正確的顯示縮小放大,如圖下:

clip_image001

2014年7月16日 星期三

使用handler處理自訂副檔名(file extension)

  • 如果有需要使用自訂的附檔名的檔案,舉例來說(*.abc), 這個.abc檔案必須透過自訂的handler來處理(因為沒有建立關連之前不會有任何程式認得這個檔案格式),因此必須要修改註冊的方式來建立兩者關連。以下透過兩個步驟來達成:

2014年7月4日 星期五

當多執行緒同時存取同一個檔案問題

這個問題可以在方法上面加載一個 attribute [MethodImpl(MethodImplOptions.Synchronized)] 來避免不同的執行緒存取同一個檔案,另一個方式則是使用Lock方法

image

參考資料:

http://stackoverflow.com/questions/541194/c-sharp-version-of-javas-synchronized-keyword

2014年7月3日 星期四

Zip Components Investigation

前陣子研究了一下各家Zip元件的各方面比較,下面是整理過後的報告:
 

 

.NET ZipForge

Chilkat.NET Zip

DotNETZIP

Create self-extracting EXE up to 4GB

V

V

V

Custom SFX stub

V

X

V

Create a big ZIP size up to 10GB

V

V

V

License

Royalty free –

For 4 Developers

Royalty free –

A Site-Wide license is for any number of developers at a single company location

MS-GPL

Price

€699

http://www.componentace.com/order/

$249

Free

解決程式相容性問題-Program Compatibility Assistant

有時候結束程式會跳出一個Program Compatibility Assistant的視窗,雖然沒有任何功能性的問題但對Usability來說畢竟是有瑕疵。這問題發生的原因是因為在註冊區並沒有紀錄這個程式的安裝路徑,解決這個問題的方法有兩個,

  • 第一個可以透過修改app.manifest來達到,在compatibility的tag當中,加入這段{35138b9a-5d96-4fbd-8e2d-a2440225f93a}是windows 7的 ID,在manifest中加入此段的code可以避免PCA的視窗彈出。

clip_image001

  • 另一種比較苦工的做法, 是每一次在執行結束前後在以下註冊區(HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted)加入自己的程式,如果使用script的寫法就是:
    • "`"reg add \`"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted`" /v `"%%S\your program location`" /t REG_DWORD /d 0x1 /f`"

但是這種寫法不好除錯也很難維護,使用manifest的管理是比較正確的做法

設計一個自動安裝程式(Installer)並且使用自解檔(self-extracting executable)的元件就會很容易發生上述的問題, 但是自解檔是透過外部ZIP元件而產生(舉例來說 .NET ZIP或ZipForge),這時候就可以使用 mt.exe 這個Tool來匯入manifest 到ZIP元件或是exe當中,mt的用法參考,以往必須要在Viual Studio裡面的build script當中寫入使用mt.exe 匯入到manifest,但是之後只需要在專案當中掛入mainifest就足夠了

讓程式執行時具有Admin權限

當沒有用Admin的權限來執行程式的時候, 有很可能會因為程式對File IO而產生例外,或是存取了需要權限的資料夾,以下的錯誤很容易發生 Access is Denied Exception,解決方法有兩種:
  • 第一種方式是在執行程式的時候按右鍵使用管理者權限執行,好處是不用對程式本身另外做任何處理;缺點也很明顯,就是每次都要手動執行這個步驟,對使用者來說Usability就打了折扣
  • 第二種是比較好的方法,在程式的專案中加入 "app.manifest"這個檔案,並且指定requestedExecutionLevel,為 "requireAdministrator",這樣一來,每次開始這個程式時,就會自動跳出用Admin執行的對話視窗
image

2013年12月17日 星期二

整合C#和Matlab的方法介紹

Matlab是套用來建構數學模型的程式語言,軟體本身功能也很強大,用Matlab來分析資料、跑模擬甚至開發一些簡單的工具也很方便。和一般高階語言相比,操作矩陣向量更是得心應手,在數學演算法的撰寫上,一行Matlab code甚至可以抵過數十行的C#或Java code,畢竟在這些高階語言的數學函式庫並沒有向Matlab這麼完整,相對的,在Matlab上開發應用程式在彈性和擴充性上也並沒有C#這麼樣的豐富成熟。
當把Matlab和C#兩種語言整合在一起後,Matlab可以提供強大的數學模型元件供C#在應用程式開發使用,便具有如虎添翼的優勢! 可惜網路上對這個主題的中文文章量極少,大多數是外文資料和國外開發者的經驗分享。本篇文章介紹C#和Matlab的整合方法主要共有兩種:
1. MATLAB Builder NE Approach
2. MATLAB Compiler Approach

2012年6月23日 星期六

ChartDirector安裝

Chart Director是一套專業繪製圖表的工具,支援PHP、.Net等程式語言,這套工具不僅提供多種樣式的圖表也包括了許多變化彈性的API,這篇文章就以安裝Chart Director在Visual Studio為的流程範例。