== 아래의 템플릿을 기재해 주시면 상세히 답변해 줄 수 있습니다. ==
1. 사용언어 (c#,vb.net) : C#
2. 사용툴 (VS2005, VS2008) : VS2008
3. 운영체제 (WIN 2003, XP) : XP
4. 질문 :
private void btn_Start_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback((new ClassName()).test1), null);
}
private void test1(object obj)
{
ListViewItem item1 = new ListViewItem("호호호호");
item1.SubItems.Add("gkgkgkgkgk");
lst_View.Items.Add(item1);
}
위와 같은 코드가 있는데.. test1 이라는 곳에 메세지창으로 해보았는데 메세지창은 잘 뜨는데 뷰에 라인이 추가가 안됩니다.
반대로
private void btn_Start_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback((new ClassName()).test1), null);
ListViewItem item1 = new ListViewItem("호호호호");
item1.SubItems.Add("gkgkgkgkgk");
lst_View.Items.Add(item1);
}
private void test1(object obj)
{
MessageBox.Show("ttttttt");
}
이렇게는 아무 이상없이 잘되는것을 확인하였습니다...
어떤것이 문제가 있을까요? ㅠㅠ
댓글
댓글 리스트-
작성자돌도끼 작성시간 09.02.09 new ClassName()).test1 -> 다른개체를 생성해버리면... 말이 안되구요.. test1만 호출하세요. 2.0부터는 크로스 스레드 에러가 뜨는데요. Invoke()사용하시던지 Control.CheckForIllegalCrossThreadCalls = false; 해주시면되요.
-
작성자종윤 작성자 본인 여부 작성자 작성시간 09.02.10 방금 도끼님의 말대로 두개 전부 다 사용해서 성공을 하였습니다. 정확하게 전자메서드나 후자 옵션이 무엇을 하는건지는 모르겠지만.. 처음으로 델리게이트라는 것을 써보았고 Invoke 라는것도 써보았습니다. 이젠 왜 이게 이렇게 해야만하는지 이해를 해야겠는데... 음~ 혹시 부가 설명좀......부탁드려도 될까요? ㅠㅠ 여하튼 오늘 하루 즐겁게 시작해서 기분이 좋습니다~ 감사합니다!