Development Experience (85) 썸네일형 리스트형 트리 구조의 DataSource를 두 UI 컴포넌트에 연결할 때 회사 프로젝트를 수행하던 중 트리 구조의 자료 구조에서 depth 1의 노드들 따로, depth 2의 노드들 따로 두 개의 UI 컴포넌트에 각각 바인딩할 일이 있었다. 나는 별 고민없이 DropDownList 의 DataSource에 depth 1의 노드들을 바인딩하였고, GridView의 dataSource에는 depth 2의 노드들을 바인딩하였다. depth 1 의 노드들과 depth 2의 노드들은 모두 한 Instance 안에 존재하였다. 초반엔 문제가 없었는데, GridView의 DataSource만 따로 조작해야 할 상황이 생기자 문제가 발생하였다. 나는 GridView에서만 Refresh를 하고 싶었는데, depth 2의 노드들을 Refresh 하고 나니 DropDownList에 바인딩되었던 .. C# Winform DropDownList의 SelectedIndex 이벤트 관리 (Telerik 사용) C# Winform을 사용한 프로젝트에서 DropDownList의 SelectedIndex 이벤트를 상황에 맞게 조절해야 할 필요성이 있었다. 사용자가 DropDownList 에서 현재 선택된 아이템이 아닌 다른 아이템을 선택할 경우, 기존 데이터가 지워진다는 메시지 팝업을 띄워주어야 했다. 처음엔 기존에 사용하던 SelectedIndexChanged 이벤트 핸들러에서 이 메시지 팝업을 띄워주려 했다. 하지만 여기서 팝업을 띄우다보니, 사용자가 기존 데이터를 지우고 싶어하지 않는 경우에도 DropDownList의 Index가 바뀌어 버리는 것이었다. SelectedIndex 이벤트가 실행되는 걸 멈추기 위해 argument로 받은 이벤트 변수 e 의 e.Cancel을 true로 하고자 했으나 Cancel.. HeapAlloc, LocalAlloc, GlobalAlloc 차이 참고> https://skensita.tistory.com/entry/HeapAlloc-LocalAlloc-GlobalAlloc-%EA%B0%81%EA%B0%81-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8B%A4%EB%A5%B8%EA%B0%80 1. Win16 운영체제에서는 프로그램마다 가지는 Local Heap과 Heap Manager가 가지는 Global Heap이 따로 존재했지만 Win32 운영체제에서는 따로 존재하지 않음. 즉, Win32 운영체제에서는 Local Heap과 Global Heap이 동일하고 이말인 즉슨 LocalAlloc과 GlobalAlloc이 동일함을 의미 2. LocalAlloc은 어플리케이션의 Default Heap에 메모리를 할당함. Default Hea.. LocalTime 과 UnixTimeStamp (UniversalTime) ToLocalTime() => 한국이면 Utc + 9가 적용됨 ToUniversalTime() => 어느 나라에 있든 UTC 기준시로 바뀜, ToLocalTime()의 반대 역할 FTP 서버 접속 외부에서 Windows 운영체제의 탐색기를 활용하여 회사 내부망에 있는 FTP 서버에 접속하려고 했더니 (물론 외부와 내부를 연결해주는 게이트웨이로 접속한 것이다.) "FTP 서버에서 폴더를 여는 동안 오류가 발생했습니다. 이 폴더를 액세스할 권한이 있는지 확인하십시오. 자세히: 200 Switching to ASCII mode. 227 Entering Passive Mode " 라는 에러가 떳다. 구글링해보니 [ Intenet Explorer 에서 인터넷 옵션> 고급 탭 > "방화벽 및 DSL 모뎀과 호환되는 수동 FTP 사용" 체크 해제 ] 위의 방법을 사용하라고 나왔다. 이 방법을 사용하니 "500 Illegal port command" 라는 에러가 떳다. 이유인 즉슨, FTP 서버 접속에는 두 가.. git abort 명령어가 안먹힐 때 git 작업하다가 에러가 나거나 취소를 하고 싶을 때 나는 보통 abort 명령을 실행시켰다. 예를 들어, rebase 작업을 하기 위해 >> git rebase BASE_BRANCH 명령을 입력하였다가, 갑자기 취소하고 싶어서 ctrl + C 를 눌렀다. 중간에 취소해서 그런지 rebase 관련 에러가 떴다. >> error: could not read '.git/rebase-apply/head-name': No such file or directory 나는 이럴 때 보통 >> git rebase --abort 명령을 통해 rebase 작업을 취소하였다. 하지만 위의 에러는 abort 명령이 먹히질 않았다. 스택오버플로우님의 도움을 받은 결과 >> git rebase --quit 명령어를 써서 해결하였다. Bitmap Create / Draw 시 lock을 걸 때 [ 증상 ] 회사에서 영상 렌더링을 위한 Bitmap Create / Draw 코드를 고칠 일이 있었다. Bitmap Create 하는 구간과 Bitmap Draw 하는 구간을 하나의 mutex로 locking하였다. 이상없이 잘 되나 했더니 화면이 자꾸 껌벅껌벅 거리는 것이었다. [ 원인 ] 이유는 Bitmap Create가 시간을 많이 잡아먹어서 Draw가 제대로 수행되지 않았던 거였다. Bitmap Create 하면서 lock을 계속 잡고 있기 때문에, 같은 mutex를 사용하는 Bitmap Draw영역은 lock 구간에 들어가지 못하고 기다린다. [ 조치 ] lock을 걸 때에는 최대한 lock 구간 내부에서 빨리 빠져나와야 한다. 그래서 Bitmap Create 하는 부분을 locking 범위에.. 영상 Delay 이슈 [ 증상 ] 회사 프로그램에서 RTSP 영상을 렌더링하고 있었는데 특정 컴퓨터에서 영상이 지연되는 현상이 발생하였다. 플레이 시간이 길어질수록 VLC로 받은 영상 화면과 회사 프로그램에서 받은 영상 화면과의 시간 차가 점점 더 벌어졌다. 처음엔 두 프로그램 모두 비슷한 영상 화면을 보여주었는데, 점점 회사 프로그램의 영상 화면이 뒤늦게 플레이되고 있었다. [ 원인 ] 회사 프로그램에서 렌더링을 하기 위한 frame queue를 만들어서 수신한 frame들을 관리하는데, 이 frame queue에 frame이 너무 많이 쌓인 게 원인이었다. 즉, queue에서 frame을 Pop 하는 속도보다 Push 하는 속도가 더 빨랐던 것이다. 이러한 이유로 queue에는 처리되지 못한 frame들이 점점 쌓여갔고,.. 이전 1 ··· 4 5 6 7 8 9 10 11 다음