Software/C#
-
C# Form UI 접근과 InvokeSoftware/C# 2024. 5. 23. 15:31
C# Form 을 사용하다보면 크로스 쓰레드 오류를 심심찮게 마주하게된다.이는 서로 다른 쓰레드에서 UI의 값을 사용하려고 할 때 발생하는 오류로, 동기화가 이루어 지지 않았을 때 치명적인 오류를 유발할 수 있는 사항이다.크로스 쓰레드를 피하기 위해서는 하나의 쓰레드만 UI접근을 허용하도록 하거나, UI접근구역을 Lock하여 동기화를 시키면 된다. Task.Run보통 메세지 루프를 돌거나 여타 쓰레드 작업을 처리해야 할 때 C#에서는 Thread를 직접 실행할 수도 있지만 Task.Run을 사용할 수도 있다. Task는 내부적으로 직접 관리하는 ThraedPool에서 쉬고 있는 Thread를 불러와 작업을 시킨다. 따라서 Task를 사용하는 것만으로도 사용자는 스스로 Thraed를 관리하지 않아도 되어..
-
Form 공용 기능을 위한 BaseFormSoftware/C# 2024. 5. 23. 15:20
앞선 포스트에서 구현한 폼들은 같은 기능이 필요한 경우가 다분하다. 또한 완전히 같지는 않아도 방식은 비슷한 경우가 많을 것이다. (필연적으로) 따라서 이를 편하게 관리하고 코드를 간결하게 하기 위하여 우리는 학창시절에 그토록 열심히 배워왔던 다형성과 오버로딩/라이딩을 사용하여 BaseForm을 구성하여 사용하도록 한다. Base Form 구현부Base Form에는 당연히 상속받을 Form들이 공통적으로 가지고 있을 변수들과 함수들이 선언된다. 그대로 같은 기능을 사용하는 Method들은 그대로 구현하고, 함수마다 다른 기능을 사용해야 하는 메쏘드는 Virtual 키워드를 활용하여 해당 Form별로 Override 하여 구현하도록 한다. Base Form 상속 BaseForm 을 상속받아 Virtu..
-
C# Form 자식 폼 붙이기Software/C# 2024. 5. 23. 15:04
C# Form으로 GUI를 작업하다보면 각각의 같은 위치에 다른 UI들이 출력되도록 만들어야 하는 경우가 발생한다.물론 같은 위치에 UI를 작업하거나 다른 Position에 UI를 작업해 두고 visible 키워드를 활용하여 서로 다른 UI를 출력할 수도 있지만, 그렇게 되면 UI가 겹쳐서 UI자체를 작업할 때 매우 곤란한 상황이 발생한다.이를 편하게 작업하기 위해 같은 위치에 표시되어야할 UI마다 서로 다른 Form들로 구성하고, 버튼이나 기타 분기점으로 해당 Form들을 같은 위치에 호출할 수 있게 되면 어떨까?? 라는 고민에서 현재 포스트를 진행하게 되었다.여기서 하나 더 추가할 점은 내가 원하는 Form 은 해상도에 반응하는 해상도 반응형 GUI라는 점. 따라서 새로운 폼을 해당위치의 판넬에 Fi..