[C#]CrossThread 처리방법
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에 추가시켜주게 하여 해결하였다.