WPF의 Cross Thread BeginInvoke 방법

2014. 7. 7. 14:48·사소한 아이의 소소한 스킬/C#
반응형

Invoke 방식과 별 큰 차이가 없다...


Invoke 사용하는 곳에서 단지 BeginInvoke만 사용해 주면 된다..


하지만 BeginInvoke와 Invoke의 차이는 알고 해야 할 듯 싶다.


내가 기억하는 BeginInvoke와 Invoke의 차이는 바로 동기, 비동기 이다.


Invoke는 동기화 함수. 그리하여 Invoke 사용 시 다른 Code가 실행되지 않는다. 즉, 다른 Code들은 다 Block하여 실행하지 않고 해당 Invoke함수가 종료될때까지 프로세스가 기다린다.


BeginInvoke는 비동기화 함수. 그리하여 BeginInvoke 사용 시 다른 Code와 동시에 실행된다. 즉 다른 Code들을 Block하지 않아 해당 Invoke 함수가 종료되지 않더라도 프로세스가 계속 진행한다.


예를 들면 특정 파일을 불러올때 Invoke로 실행 시 파일을 불러오기 전까지는 아무 작업도 하지 못하고 계속 기다려야한다. 하지만 BeginInvoke로 실행 시에는 파일을 불러오면서 다른 작업들도 동시에 할 수 있다는 점이 있다.


BeginInvoke가 좋아 보이지만 Invoke도 중요하고 자주 사용되므로 각자의 사용법을 잘 알고 사용해야 할 것같다.


public partial class Window1 : Window
    {
        public delegate void TempDelegate();
        public TempDelegate tempDelegate;

        Timer _timer = null;

        public Window1()
        {
            InitializeComponent();

            InitTimer();
        }

        private void InitTimer()
        {
            if (_timer != null)
                return;
            TimerCallback tcb = new TimerCallback(ThreadFunc);
            _timer = new Timer(tcb, null, 0, 1000);
        }

        public void ThreadFunc(Object stateInfo)
        {
            if (this.Dispatcher.Thread != Thread.CurrentThread)
            {
                tempDelegate += new TempDelegate(SetTextBox);
                DispatcherOperation dispatchTest = Dispatcher.BeginInvoke(DispatcherPriority.Normal, tempDelegate);

                dispatchTest.Completed += new EventHandler(dispatchTest_Completed);
            }
            else
            {
                SetTextBox();
            }
        }

        void dispatchTest_Completed(object obj, EventArgs e)
        {
            MessageBox.Show("끝");
        }

        private void SetTextBox()
        {
            textBox1.Text = DateTime.Now.ToString();
        }
    }

Invoke가 BeginInvoke로 변하면서 DispacherOperation이라는 변수에 BeginInvoke값을 지정해주었다.


위와 같은 행동은 BeginInvoke시 종료 시점을 알 수 없기에 


dispatchTest.Completed += new EventHandler(dispatchTest_Completed);

위와 같은 코드를 추가 하여 종료 되었을 시 특정 함수가 실행되도록 추가해준다.


이벤트 추가와 같은 것.... ( 이벤트도 공부해야하는데... )


하단의

void dispatchTest_Completed(object obj, EventArgs e)
        {
            MessageBox.Show("끝");
        }

이 구문이 BeginInvoke 종료시 실행되는 함수다...


하지만 예시 구문이 좀 그렇다.... 


1초마다 BeginInvoke가 실행되는데....


끝이라는 MessageBox가 1초마다 나타난다...... 어차피 예시 프로그램이니깐...ㅠㅠㅠ



2014/06/09 - [Skill/C#] - WPF의 Cross Thread 문제



반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/C#' 카테고리의 다른 글
  • 동적 라이브러리와 고정 라이브러리의 차이..
  • WPF에서의 Console 이용법
  • WPF의 Cross Thread 문제
  • WPF Window Show, Hide, Close
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (965)
      • 사소한 아이의 소소한 일상 (247)
      • 사소한 아이의 소소한 먹거리 (44)
      • 사소한 아이의 소소한 정보 (75)
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (64)
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    python
    바이에른 뮌헨
    회사밥
    뮌헨
    c#
    러닝
    WPF
    문제
    분데스리가
    독일
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
WPF의 Cross Thread BeginInvoke 방법
상단으로

티스토리툴바