2011-07-26 5 views
1

스레드가 폼 컨트롤을 업데이트하는 시나리오가 있습니다. 나는 그것을 성공시키기 위해 http://msdn.microsoft.com/en-us/library/ms171728.aspx을 따라 갔지만, 나는 성공적이지 못했다.스레드에서 폼 컨트롤을 업데이트하는 스레드 불일치

프로그램은 양식 컨트롤 (목록보기)과 인터넷 (주식 시세)에서 정보를 가져 오기위한 스레드를 만듭니다. 사용자가 listView에 추가 된 다른 폼 컨트롤에서 알려진 심볼을 선택할 때마다이 인턴은 인터넷에서 따옴표를 가져 오는 스레드에 추가하고 해당 심볼에 대한 대리자를 추가하고 모든 watch list 심볼을 반복합니다. 가격 변경이있을 때마다 인터넷에서 따옴표를 가져옵니다. 스레드는 등록 된 대리인을 호출합니다. 해당 delegate에서 listView 요소에 액세스하고 있습니다. 여기서는 문제 스레드가 일치하지 않는 문제에 직면하고 있습니다.

위의 링크를 따라이 문제를 해결하려면 Approach-1) 위임자에서 백그라운드 작업자를 시작했습니다. 같은 문제 Approach-2) 주 프로그램이 백그라운드 작업자를 생성합니다.이 작업자는 listView에서 업데이트 할 목록을 반복합니다. 대리인은 새로 워진 가격을 추가하여 백그라운드 작업자가 루핑중인 목록을 표시합니다. 배경 작업자가 listView에 다시 액세스하면 스레드 일관성 문제가 발생합니다.

이 문제를 해결하는 방법? 배경 노동자 목록보기에 액세스 할 때

답변

1

다시 일치하지 않는 문제가 발생 스레드.

예. 그것은해서는 안되기 때문입니다. 백그라운드 작업자는 UI에 안전하게 액세스 할 수 있습니다. RunWorkerCompletedProgressChanged 이벤트. DoWork 이벤트는 UI가 아닌 스레드에서 계속 실행됩니다. 비 UI 스레드에서 UI에 액세스하려면 Control.Invoke 또는 SynchronizationContext.Send를 사용하여 UI 스레드에 "다시 마샬링"(키워드로 사용하는 경우 이러한 추가 연구 결과로 이어질 것이다.)

해피 코딩.

+0

고맙습니다. 그것은 효과가있다. – Srinivas

+0

@Srinivas 당신은 오신 것을 환영합니다 :) –

관련 문제