none
쓰레드 및 대리자 관련하여 질문입니다. RRS feed

  • 질문

  • 보통 쓰레드에서 폼의 컨트롤(리스트박스, 텍스트박스 등..)에 접근 및 사용하기 위해서는 대리자를 사용해야만 합니다.

    원칙은 자식이 부모의 컨트롤을 함부로 제어할 수 없다.로 알고있는데

    왜 굳이 대리자를 사용하여 접근하도록 한 것인가요?

    자식에서 부모를 컨트롤 하던 안하던 프로그램 개발자의 선택 아닌가요?

    (사용을 못하면 못하고, 하면 하고 대리자를 쓰면 가능하게 되는 이유..)

    오히려 사용을 위해서 대리자를 선언하고, Call Back 함수를 만드는데 보다 저 번거러운 것 같다고 생각합니다.

    프로그램 개발자의 잘못된 접근으로 인한 오류 발생을 막기 위한 방편으로 대리자를 사용하도록 하는것인지

    아니면 시스템 구조상에서의 어떤 이유가 있는지 궁금합니다.

    혹시 질문이 잘못되었거나, 질문에 어떤 문제가 있다면 답변 부탁 드립니다.
    2013년 10월 7일 월요일 오전 8:19

답변

  • 질문에 잘못된 점이 있습니다. ^^

    1. 스레드에서 폼의 컨트롤에 접근 및 사용하기 위해 대리자를 사용하는 것은 아닙니다.
    2. 자식이 부모의 컨트롤을 함부로 제어할 수 없는 것도 아닙니다.

    원칙은 "UI 요소를 생성한 스레드만 그 UI 요소를 접근할 수 있다" 입니다.

    이것은 윈도우만 그런 것도 아니고, Android도 그렇고 심지어 MAC OS에서도 마찬가지입니다. (시스템 구조 상 그런 것입니다.)

    닷넷에서 대리자를 통하도록 하는 이유는, 해당 UI 요소를 생성한 스레드로 하여금 실행시킬 수 있는 수단을 그렇게 한 것입니다.

    C/C++의 경우 UI 요소를 생성하지 않은 스레드에서도 접근해도 별다른 오류가 발생하지 않는데요. 그런 경우에는 동기화가 맞지 않아서 오동작이 발생하곤 합니다. 예를 들어, 2개의 스레드를 생성해서 하나의 listbox에 1,000개의 목록을 삽입하는 코드를 돌리면 그 중에 누락되는 것이 발생합니다.

    델리게이트가 불편하다면, 람다 메서드를 이용해서 인라인 시키는 것도 방법입니다.

    • 답변으로 표시됨 Student_WHKIM 2013년 10월 8일 화요일 오전 5:36
    2013년 10월 7일 월요일 오전 10:26