[WinForm 08.19] 크로스 쓰레딩 피하기

2011. 8. 19. 22:02C#/WinForm

델리게잇 개뿔도 몰랐는데 점점 알수록 잘못된 코드를 짜고 있다는걸 느끼게 되네...

아놔~!!!

일단 기본적으로 델리게잇 을 선언하고 쓰는 방법이 있지만 그건 나중에 정리하고 방금 안

다른 클래스에서 델리게잇 선언해서 크로스 쓰레딩 피하는 방법을 정리 단지 한줄이지만 유용해요!! 


 namespace zzz
{
    class Class1
    {
        public Form1 f1;
        public Class1(Form1 t)
        {
            f1 = t;
        }
        public void zff()
        {
            f1.Invoke(new MethodInvoker(delegate() { f1.bt[0].Text = "123"; }));
        }
    }

 ////////////////////////////////////////////////////////
        private void button1_Click(object sender, EventArgs e)
        {
            Class1 c1=new Class1(this);
            c1.zff();         
        }

다른 클래스에서 일반적으로 메인으로 부터 데이터를 넘겨 받고 그 후 다음과 같이 쓰면 크로스쓰레딩이나 익섹셥이 뜬다 .

 f1.bt[0].Text = "123"; 
 
완전 케짜증 디버깅 없이 실행하면 되지만 왠지 찝찝하다....

말두 안되게 짜서 납품했지만 하면서 좋은게 많이 배우게 되넹 결론적으로 여기서 수정방법은

 f1.Invoke(new MethodInvoker(delegate() { f1.bt[0].Text = "123"; })); 

다음과 같이 Invoke(new MethodInvoker(delegate(){[실행할 내용들]}))로 하면 문제 없이 잘 실행된다...;ㅅ; 눈물 날듯 

메인 폼에서는 f1이라고 클래스 객체를 햇는데 this해서 하면 걍 된다...!!

요거 말고도 그냥 델리게잇 쓰는 방법도 있고 여러 방법이 있는데 차츰차츰 공부해 보는것도 좋은거 같다.