학습/C#

[C#]CrossThread 처리방법

쩡용 2014. 5. 16. 15:00

Cross Thread란

MainThread가 돌게되면서 다른 Control의 값 변경을 하려할때 되는 문제이다.



나는 프로그램을 돌리면서 ListBox에 결과값을 추가시키려 하여 발생한 문제였다.

내가 해결한 방법은

전역변수에 Delegate를 선언하고 ListBox에 Item을 추가시켜주는 메소드를 만들어서 해결하였다.


private delegate void SetListBoxCallback(string msg);

이런식으로 전역변수에 Delegate를 선언해주고


ListBox에 Item을 추가시켜줄 메소드를 하나만들었다.


private void SetListBox(string msg)             //crossThread방지를 위해 델리게이트선언

        {

            if (this.lb_result.InvokeRequired)

            {

                SetListBoxCallback setlistboxcallback = new SetListBoxCallback(SetListBox);

                this.Invoke(setlistboxcallback, new object[] { msg });

            }

            else

            {

                lb_result.Items.Add(msg);

            }

        }



SetListBox(string.Format("trid : {0} {1}", id, retVal ? "성공" : "실패"));

그리고 결과값을 추가시켜줄땐 메소드를 불러서 그 메소드가 Item을 Listbox에 추가시켜주게 하여 해결하였다.