CAFE

Winform & WPF | C# 질문

C# 에서요. 스레드풀을 이용한 리스트뷰에 값을 넣을려고 하는데 안됩니다;;ㅠㅠ.

작성자종윤|작성시간09.02.09|조회수275 목록 댓글 2


== 아래의 템플릿을 기재해 주시면 상세히 답변해 줄 수 있습니다. ==


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 라는것도 써보았습니다. 이젠 왜 이게 이렇게 해야만하는지 이해를 해야겠는데... 음~ 혹시 부가 설명좀......부탁드려도 될까요? ㅠㅠ 여하튼 오늘 하루 즐겁게 시작해서 기분이 좋습니다~ 감사합니다!
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼