2009-04-01 4 views
1

에서 데이터를이 쉬운 Q,하지만 큰 도움이됩니다 검색 :닷넷 : 스레드

제목 "데이터 검색에서 스레드에서 MSDN (Here하는) 콜백을 사용하여 자식 스레드에서 데이터를 얻을 수있는 방법을 소개합니다 자식 스레드로 주 스레드에서 전달 대리자로 캡슐화 방법 -. 데이터를 가지고

우리가 있기 때문에 당신은

내 Q는 (은 MSDN page의 마지막 예) 명확하게 볼 수 있습니다 데이터 검색 (자식 스레드에서 마이 (mai)) n 스레드) 콜백 메서드는 자식 스레드가 아닌 주 스레드에서 실행해야합니다.

코드를 변경하여 (확인하기 위해) 각 출력 전에 스레드의 이름을 붙였습니다. 방법 2 : :이 출력을 가지고

"방법 2"반면 주 스레드 "시스템"... :

public static void ResultCallback(int lineCount) { 
    Console.WriteLine(Thread.CurrentThread.Name + ":Independent task printed {0} lines.", lineCount); 
} 

내가 자식 스레드라는 독립적 인 작업은 1 개 라인을 인쇄.

올바른 출력이 있었어야했는데 여기서 시스템 : 독립 작업 .. 1 개 라인을 인쇄

여기에 술에 취해

? MSDN, 나 또는 .NET?

답변

0

"당신";-p

콜백 여전히 작업자 스레드에서 실행됩니다; 그들은 코드 코드로 다시 데이터를 제공하지만 호출 스레드을 인터럽트하는 내장 된 방법을 가지고 있지 않습니다. 필요한 경우 해당 작업을 다시 기본 스레드로 푸시하는 것은 코드의 책임입니다. 예를 들어, 윈폼에 당신이있을되는 앱 :

public static void ResultCallback(int lineCount) { 
    // runs on worker thread 
    Invoke((MethodInvoker)delegate { 
     // runs on UI thread 
     Console.WriteLine(Thread.CurrentThread.Name + 
     ":Independent task printed {0} lines.", lineCount); 
    }); 
} 
+0

나는 첫 번째 부분을 가지고있다 하지만 주전산기로 되돌아가는 방법을 얻지 못했다! – Shankarooni

+0

어떤 아키텍처를 사용하고 있습니까? winforms? 편물? wpf? 콘솔? 서비스? Winforms에는 Control.Invoke (위 그림 참조)가 있습니다. WPF/Silverlight, Dispatcher 등을 사용합니다. –

+0

내 스레드 학습을 위해 콘솔을 사용하고 있습니다. (흠, Invoke 키워드에 밑줄을 그었습니다.) – Shankarooni

0

당신이 콜백을 사용/필요하지 않고 데이터가 항상 공유 메모리와 C# 잠금 키워드를 사용할 수있는 매우 작은 경우.

Maciej.