728x90
반응형

Development Tip 43

C# - System.InvalidOperationException 크로스 스레드 작업이 잘못되었습니다

안녕하세요, MoonLight입니다. ​ C#에서 평소처럼 Control에 접근해서 이런저런 작업을 하려고 하는데, 아래와 같은 Error를 만나는 경우가 있습니다. ​ ​ ​ 비교적 설명이 자세히 나와 있는데요, Control이 만들어진 Thread가 아닌, 다른 Thread에서 해당 Control에 Access하려고 하는 경우에 ​ 이런 Error가 발생합니다. ​ 저 같은 경우엔 UI를 만든 Main Thread가 아닌, 작업 Thread에서 Main Thread UI를 변경하고자 할 때 이런 Error를 만났습니다. ​ 해결 방법은 Simple합니다. delegate를 사용하면 됩니다. ​ delegate는 주로 Windows Forms Application에서 사용되는데, UI를 다루는 과정에서..

Development Tip 2024.03.27

C# Thread 함수에 Parameter 전달하기

안녕하세요, MoonLight입니다. ​ 오늘은 C#에서 Thread 함수를 만들어서 사용할 때, Parameter를 넘기는 방법에 대해서 알아보도록 하겠습니다. ​ 언뜻 떠오르는 방법은 Class 변수를 전역 변수처럼 사용해서 사용하는 방법이 있을 수 있겠습니다. ​ 하지만, 뭔가 세련되지 못한 듯한 느낌이 오죠? ​ 제가 오늘 소개해 드릴 방법은 ParameterizedThreadStart Class를 사용하는 방법입니다. ​ ParameterizedThreadStart Class 사용법을 예제 Code로 한 번 알아보도록 하겠습니다. ​ using System; using System.Collections.Generic; using System.Linq; using System.Text; using..

Development Tip 2024.03.02

C# - "System.InvalidOperationException: 컬렉션이 수정되었습니다" 오류

안녕하세요, MoonLight입니다. ​ C#에서 Multi Thread or Task 작업 중에 'System.InvalidOperationException: 컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수도 있습니다.'라는 Exception을 보신적이 있을 것입니다. ​ Multi Thread 혹은 Multi Task을 사용하다 보면 여러 Thread or Task에서 공통으로 사용해야 하는 값들이 있을 것입니다. ​ 흔히 이것을 공유 자원이라고 하고 공유 자원을 여러 Thread에서 잘 사용할 수 있도록 조절하는 것을 동기화라고 하죠. ​ 결론적으로, 동기화 문제를 해결하는 방법은 하나의 Thread에서 공유 자원을 사용하고 있으면 다른 Thread들에서는 사용하지 못하게 막는 것입니다. ​..

Development Tip 2024.02.24

C# listbox를 자동 스크롤되도록 만들기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 C#으로 Winform Application을 만들다 보면, Log나 Message를 연속으로 출력해 주는 Control이 필요한 경우가 가끔 생기기도 합니다. ​ 이런 기능을 제공하는 Control이 있는지 Visual Studio 찾아보니 기본 도구 상자에는 이와 같은 기능을 제공해 주는 Control은 없는 것 같아서 ​ ListBox를 이용해서 한 번 만들어 보려고 합니다. ​ 최종적으로 구현하려는 기능 다음과 같습니다. - Text 형식의 Log Message를 Control에 추가가능 - Log Message를 추가하면 자동으로 Scroll되고, 최종적으로 추가한 Log Message가 가장 하단에 보이도록 구성 ​ 우선 아래와 같이..

Development Tip 2024.02.15

C# UI 작업하면서 Delay 주기

안녕하세요, MoonLight입니다. ​ 오늘은 C#에서 Thread 작업 중에 UI가 먹통이 되지 않으면서 Delay를 줄 수 있는 방법을 2가지 소개해 드릴까 합니다. ​ Delay를 주는 함수로써 Thread.Sleep()이 대표적인데, 이 녀석은 Delay 동안 Blocking된다는 치명적인 단점이 있습니다. ​ Blocking되버리면, UI가 먹통이 되버리기 때문에 사용자의 짜증을 유발할 수가 있습니다. ​ 이런 상황은 절대로 일어나선 안되겠죠. ​ ​ 이를 방지할 수 있는 방법으로 제가 주로 사용하는 방법은 2가지가 있는데요, 하나씩 알아보겠습니다. ​ ​ 1. Event 처리하면서 Delay하기 아래 Code와 같은 Delay함수를 만듭니다. ​ 정해진 시간만큼 Delay하고, System...

Development Tip 2024.02.14

C# - Application을 관리자권한으로 실행하기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 C#으로 응용 프로그램을 개발할 때 관리자 권한으로 실행되도록 하는 방법을 소개해 드리겠습니다. ​ C# Application을 만들다 보면 간혹 내가 만든 Application이 관리자 권한으로 실행되도록 해야 하는 경우가 있습니다. ​ 예를 들면, 하드웨어 관련 작업을 수행을 한다거나 기타 여러가지의 사유로 이런 경우가 생길 수 있습니다. ​ ​ ​ 저는 Application 속성(manifest)를 수정하는 방법을 소개해 드릴 예정이며, 어떻게 하면 되는지 자세히 알아보도록 하겠습니다. ​ ​ ​ 1) 먼저, 작업하고 계신 Application 속성으로 갑니다. ​ ​ ​ ​ ​ ​ ​ ​ ​ 2) '보안' 탭으로 이동하신 후에 오른쪽에 ..

Development Tip 2024.02.05

BIOS에서 TPM(Trusted Platform Module) 활성화 방법

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 Windows 11을 설치하기 위해서 반드시 필요하다고 하는데, 처음 들어보는 TMP(Trusted Platform Module)을 ​ BIOS에서 Enable하는 방법을 알아보도록 하겠습니다. ​ 우선, TPM(Trusted Platform Module)이란 PC의 보안을 향상시키는 방법 중 하나이며 ​ 꽤 오랫동안(20년 가까이) 사용되어져 오던 기능이라고 하네요. https://support.microsoft.com/ko-kr/topic/tpm%EC%9D%B4%EB%9E%80-705f241d-025d-4470-80c5-4feeb24fa1ee ​ 하지만, 실제로 잘 사용되어지진 않아서 인지, 저도 Windows 11 설치하려다가 처음 알게 ..

Development Tip 2024.01.30

AMD CPU '가상화' SVM(Secure Virtual Machine)기능 켜기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 AMD CPU를 사용하는 사용자들이 '가상화' 기능을 Enable하는 방법에 대해서 알아보고자 합니다. ​ AMD CPU는 가상화 기능을 SVM(Secure Virtual Machine)이라는 이름으로 지원하고 있습니다. ​ 제 개발용 PC에는 AMD 3700X를 사용하고 있는데, 이 PC에 WSL2에 Docker를 설치해 보려고 이것저것 확인해 보던 중에 ​ 이 '가상화' 기능이 꺼져 있더라구요. ​ BIOS에서 켜야 하는데, 살짝 복잡한 것 같아서 공유해 보도록 하겠습니다. ​ ​ ​ 먼저, 당영한 이야기지만, BIOS에 들어갑니다. ​ 기가바이트 BIOS화면으로 설명하자면, BIOS에서 'M.I.T' 메뉴로 들어갑니다. ​ 거기에서 'Ad..

Development Tip 2024.01.26

Visual Studio Code python Argument 넣어서 디버깅하기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 Visual Studio Code에서 python 명령어 인자(Arguments)를 넣어서 Debugging 할 수 있는 방법을 소개해 드릴까 합니다. ​ 다른 이들의 Project를 받아서 내가 직접 변수들 값도 보면서 이것저것 확인해 보고 싶은 경우가 많은데 ​ 이럴 때에 Command Line Arguments를 넣는 방식으로 만들어진 Project를 Visual Studio Code로 ​ Debugging하려면 조금 난감한 경우가 있습니다. ​ ​ 이럴때 어떻게 하면 쉽게 Command Line Arguments를 넣어서 Debugging 할 있는지 알려드리겠습니다. ​ ​ ​ 먼저, 'Debug' 단추를 누른 후에 아래 그림과 같이 '..

Development Tip 2024.01.03

Bitbucket Public Key 등록 방법

Bitbucket 작업시에 아래와 같이 Public Key가 없다는 Error가 발생하는 경우에, Bitbucket에 나의 Public Key를 등록해야 합니다. 우선 ~/.ssh에 Public Key File이 있는지 확인합니다. Key File이름은 id_rsa.pub 입니다. 위와 같이 Key File이 없다면 생성해야 합니다. ssh-keygen으로 Public Key 생성합니다. Bitbucket으로 가서 방금 만든 Public Key를 등록합니다. 아래 위치로 따라가 주세요 아래 command로 Key File 내용을 클립보드로 복사합니다. 복사한 Key File 내용을 아래 위치에 붙여넣기 해줍니다. 다시 해 보면 잘 되는 것을 확인할 수 있습니다.

Development Tip 2023.10.31
728x90
반응형