본문 바로가기

Programming/C#20

[C#] Xml 로드 할때 많이 발생되는 에러 [해결법] ✔ Xml Load Error 1. Data at the root level is invalid. Line1, position 1 2. XmlException: There is no Unicode byte order mark. Cannot switch to Unicode. 1. Data at the root level is invalid. Line1, position 1 - 이 에러는 에서 encoding 관련 발생되는 문제로 해결법은 아래와 같다. //발생 루트 XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlString); //Solution XmlDocument xml = new XmlDocument(); xml.Load(xmlString); 엄청 간단하.. 2021. 11. 9.
[C#, Unity3D] 레지스트리를 활용한 컴퓨터에 설치된 프로그램 확인 및 Path 가져오기 - Microsoft.Win32.Registry ✔ 내 컴퓨터에 설치된 프로그램 경로를 레지스트리 데이터를 확인하여 찾기 C#, Unity : Get installed program check and path 안녕하세요. 이번 포스트는 기존에 설치되어 있는 프로그램이 있는지 그리고 그 경로가 어디인지를 찾아보겠습니다. 프로그램을 개발하면서 프로그램이 어떤 특정 프로그램을 설치해야하는 경우가 있습니다. Nodejs를 설치하려면 파이썬이 필요하듯이 말이죠. 그럼 내 프로그램에서 해당 프로그램이 설치되었는지 확인하고 설치가 안되었다면 설치페이지로 자동으로 링크가 간다면 편리하겠죠? 정말 간단합니다. ※ 참고로 설치된 프로그램명을 모르신다면 아래쪽 레지스트리 경로 확인하는 부분부터 참고해서 보세요. - 설치 경로 찾기 소스 - using Micorosoft... 2021. 10. 2.
[C#] 클래스 멤버 간 데이터 비교 - IEqualityComparer ✔ Object Member Compare 클래스 안 멤버 비교 - 변경된 데이터가 있는 사항만 추출 작업을 하다보면 클래스를 비교하는 일이 아닌 클래스간 데이터를 비교해야하는 일이 많이 발생한다. 그리고 이전에 받은 정보와 새로 받은 정보가 일치할 경우에는 내용을 업데이트 시킬 필요가 없고, 변경된 사항에만 업데이트를 시키면 된다. 이론적으로는 알겠는데 어떻게 구현해야할까. 일반적으로 클래스비교는 object.Equals 함수를 통해 클래스 비교한다. 하지만 두개의 새로운 클래스를 비교할 경우 데이터는 같아도 object.Equals에서 false를 반환한다. 두 클래스간에 멤버 값이 변경된 사항이 있는지 확인하는 방법은 IEqualityComparer 인터페이스를 활용하면 된다. 예제는 다음과 같다... 2020. 11. 17.
[C#] 클래스 라이브러리(.dll) 프로젝트에서 Winform 사용하기 ✔ C# 클래스 라이브러리 프로젝트에서 윈폼 추가하기 Add Winform in DLL Project 타 프로그램에서 .dll로 읽어들여 기능을 Add-on을 하는 경우가 많다. 단순 프로젝트 생성을 WinForm을 생성하면 빌드시 exe형태로 나오기때문에 활용을 할 수 없다. 클래스 라이브러리 프로젝트를 만들어 Winform을 추가하고 타 프로그램에서 UI로 컨트롤이 가능하도록 만들어야한다. 먼저 클래스 라이브러리 프로젝트를 생성한다. 생성 후 참조에 우클릭을 하여 참조 추가를 누른다. 어셈블리 탭 -> System.Windows.Forms 선택 -> 확인. 이제 폼을 만들자. 프로젝트 우클릭 -> 추가 -> Windows Form ( 추가 -> 새항목 -> Windows Form으로 해도 무관 ) 추.. 2020. 6. 11.
[C#] 문자열에 포함된 공백 모두 삭제, 특정 문자 모두 삭제 ✔ C# - 문자열에 포함된 특정 문자 삭제 방법 All remove whitespace characters from a string 흔히 사용하는 Trim은 문자열의 앞뒤의 공백만 제거한다. String.Concat을 사용하여 특정문자를 찾아 문자열로 반환한다. public static string Concat (string str0, string str1, string str2, string str3) 공백 삭제 코드는 다음과 같다. using System.Linq; string str = "a b c d ef "; string re = string.Concat(str.Where(x => !char.IsWhiteSpace(x))); //결과 : re = "abcdef" 공백이 아닌 다른 문자를 삭제할.. 2020. 4. 28.
[C#] Winform에서 Thread 동작 안되고 종료될 경우 [해결법] ✔ Winform에서 Thread 사용시 주의사항 Winform에서 Thread를 생성하여 실행한뒤 Thread 구문이 동작이 안되거나 종료되는 현상이 발생하는 것처럼 보인다. Debug로 확인 시 System.InvalidOperationException: '많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다.' 해결 방법 Thread thread = new Thread(Run); thread.SetApartmentState(ApartmentState.STA); thread.Start(); Thread 생성 시작 전 아파트 모드를 설정해주면 해결된다. 2020. 4. 22.
[C#] 나만의 캡처, 녹화 프로그램을 만들자 - Part.0 [OpenCV 설치] ✔ C# - OpenCV 도구상자에 PictureBoxIpl 추가 방법, OpenCV 설치, UserInterface.dll 먼저 Visual Studio 에서 Windows Form으로 프로젝트를 하나 만듭니다. 그런뒤 솔루션탐색기에서 프로젝트 마우스 우 클릭 -> NuGet 패키지 관리 NuGet 패키지 관리 창에서 찾아보기 탭 -> OpenCV 검색 -> 설치 설치가 완료되었다면 위의 와 같이 참조가 추가됩니다. 그리고 마지막으로 확인해야될 사항!!! 도구 상자에 OpenCV 도구가 추가되었는지를 확인해야됩니다. 만약 추가되어있지 않다면 ??? 아래와 순서에 따라 추가해야합니다. 먼저 프로젝트 빌드를 진행합니다. ( Ctrl + Shift + B ) 도구 상자 빈공간 마우스 우 클릭 -> 항목 선택.. 2020. 3. 6.
[C#] 반복문 병렬 처리하기 - Parallel.For, Parallel.Foreach ✔ 반복문 병렬 처리 Parallel.For, Parallel.Foreach로 대용량 데이터 처리 반복문 처리 속도 개선 요즘 CPU 듀얼코어, 쿼드코어 등등 많은데 이 코어들이 병렬적으로 일을 함으로써 속도를 많이 높일 수 있다. ● Parallel 클래스 Parallel 클래스는 Parallel.For, Parallel.Foreach 가 있으며 우리가 흔히 사용하는 For문과 Foreach 문으로 생각하면 된다. Parallel 클래스의 For, Foreach는 다중 쓰래드로 병렬적으로 계산하면서 처리된다. 하지만 무조건 속도가 빨라지는 것은 아니다. 무분별하게 사용할 경우는 오히려 더 느려지는 경우도 있다. 병렬 처리는 대량의 데이터를 처리하거나 복잡한 계산을 처리하는 경우에 사용해야한다. 병렬 처.. 2020. 2. 19.
[C#] 쓰레드 생성 / 실행 / 종료 ✔ Thread 시작, 실행, 종료 ◈쓰레드 생성 - Thread를 생성하고 돌리기위해서는 먼저 Thread가 작업할 함수를 만들어야합니다. //Thread가 작업하는 함수 private static void Run() { while(true) { Console.WriteLine("Do working..."); } } - 함수 생성 후 Thread 클래스 생성. Thread thread = new Thread(Run); // Thread 생성 ◈쓰레드 시작 thread.Start(); // 생성된 Thread 시작 ◈쓰레드 종료 - 강제종료 thread.Abort(); //Thread 강제종료 - 작업 수행 후 종료 ( 메인 쓰레드가 생성된 쓰레드 작업이 종료될때까지 기다렸다가 종료됨 ) thread.J.. 2019. 10. 17.