2013-04-05 6 views
2

몇 가지 10 가지 방법이 포함 된 버튼 클릭이 있습니다. 여기서 버튼 클릭이나 코드 내에서 스레드를 사용하여 내 Windows 양식 응용 프로그램이 멈추지 않도록하고 싶습니다.C의 스레드 정보 #

내가 지금까지 시도한 것은 ... !! 인내에 대한

감사의가 .. 이 어떤 도움을 이해할 수있을 것이다라는 예외를 얻고있다 collectionListOfPtags() 방법에

   collectListOfPTags(); 

       REqDocCheck = new Thread(new ThreadStart(collectListOfPTags)); 

       REqDocCheck.IsBackground = true; 

       REqDocCheck.Start(); 

       WaitHandle[] AWait = new WaitHandle[] { new AutoResetEvent(false) }; 
       while (REqDocCheck.IsAlive) 
       { 
        WaitHandle.WaitAny(AWait, 50, false); 
        System.Windows.Forms.Application.DoEvents(); 
       } 

는 "이에서 만든 것보다 콤보는 다른 스레드에서 액세스 할 수 있습니다"..

+2

여기 스레딩 할 수있는 좋은 소개가있다 : 여기

는 (정말 간단) 예제 ['Albahari'] (http://www.albahari.com/threading/) 당신은 GUI를 –

+3

에 액세스 할 수 없습니다 메인 스레드 이외의 다른 스레드로부터의 제어 그것에 대한 19861353 게시물이 있습니다 ... 그것에 대한 검색 (http://stackoverflow.com/search?q=gui+thread) – derape

+0

@ NicholasButler 나는 그것을 통과했습니다 .. !! 답장을 보내 주셔서 감사합니다. –

답변

0

이것은 BackgroundWorker 구성 요소에 적합합니다.

collectListOfPTags 메서드를 두 가지 방법으로 분할합니다. 첫 번째 메서드는 데이터를 수집하고 처리하며 두 번째 UI 컨트롤은 업데이트합니다. 이 같은

뭔가 :

void OnClick(...) 
{ 
    var results = new List<string>(); 

    var bw = new BackgroundWorker(); 

    bw.DoWork += (s, e) => CollectData(results); 
    bw.RunWorkerCompleted += (s, e) => UpdateUI(results); 

    bw.RunWorkerAsync(); 
} 

void CollectData(List<string> results) 
{ 
    ... build strings and add them to the results list 
} 

void UpdateUI(List<string> results) 
{ 
    ... update the ComboBox from the results 
} 

BackgroundWorker는 스레드 풀 스레드에서 백그라운드에서 CollectData을 실행되지만 제대로 ComboBox에 액세스 할 수 있도록 UI 스레드에서 UpdateUI를 실행합니다.

0

여기서 필요한 것은 대리인입니다. 델리게이트를 만들어 스레드 함수에서 GUI에 액세스하는 함수에 넣기 만하면됩니다.

코드에서
public delegate void DemoDelegate(); 

,

collectionListOfPtags() 
{ 
    if ((this.InvokeRequired)) { 
    this.Invoke(new DemoDelegate(collectionListOfPtags)); 
    return; 
    } 

    // Your Code HERE 
} 

나는이 작업을 바랍니다! 행운을 빕니다 :-)

0

스레드 풀을 살펴보아야합니까? 스레드 풀은 백그라운드에서 여러 작업을 수행하는 데 사용할 수있는 스레드 모음입니다. 그들은 사용하기 쉽고 스레드로부터 안전합니다. http://msdn.microsoft.com/en-us/library/h4732ks0.aspx