달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

사용자가 생성한 쓰레드내 (사용자 쓰레드) 에서, 메인 쓰레드가 소유한 컨트롤 객체를 제어하기 위해서는 Invoke 를 통해 해결하셔야 합니다.


간략히 이해하시려면 사용자 쓰레드에서 이벤트를 발생시켜서, 메인 쓰레드에서 이벤트로 받아 처리하라는 이야기 인데요. (이게 더 말이 어렵나??


개발자는 머니머니해도 소스 몇줄 보여드리면 이해가 팍팍..


        // 버튼을 누르면 쓰레드 동작..

        private void button1_Click(object sender, System.EventArgs e)

        {           

            hTread = new Thread(new ThreadStart(Test));

            hTread.Start();

        }


        private void Test()

        {

            try

            {

                while(true)

                {

                    // Form2 를 열기위한 이벤트 발생..

                    this.Invoke(new EventHandler(InvokeShowDialog));

                    Thread.Sleep(5000);

                }

            }

            catch(Exception err)

            {

                MessageBox.Show(err.ToString());

            }

           

        }

     

        // 이벤트 처리

        private void InvokeShowDialog(object sender, EventArgs e)

       {

            Form2 f = new Form2();

            f.Show();

       }

Posted by tornado
|