fork from codeproject and add many files ,many feature