2012-07-25 8 views
0

나는 html 문서를 파싱하는 방법이 있지만 시간이 오래 걸리고 UI가 멈 춥니 다. 그래서 스레드를 사용하고 싶지만 혼란 스러워요. 배경 작업자, 운영자 등 많은 종류의 스레드가 있습니다. 어떤 유형을 사용해야합니까? 또한, 내 방법에서는 매개 변수를 전달합니다. 스레드를 사용하면 어떻게 하나의 매개 변수를 전달할 수 있습니까?HTML 구문 분석 - 어떤 종류의 스레드를 사용해야합니까?

+0

저는 종종 액션을 사용합니다. 그러나 부차적 인 질문은 어떤 종류의 매개 변수를 말하는 것입니까? – Silvermind

+0

나는 html 문서의 url과 함께 문자열 매개 변수를 전달한다 ... – user1005633

답변

0

여기에 배경 노동자를 사용하는 예제 코드 :이 도움이

// I usually disable controls (buttons, etc.) 
// so user is prevented to perform other 
// actions 
BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += (s, e) => 
{ 
    // Get the parameter 
    var param = e.Argument as <your expected object> 
    // Perform parsing 
} 
worker.RunWorkerCompleted += (s1, e1) => 
{ 
    System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(
     new Action(() => 
     { 
      // enable you controls here 
     })); 
} 
worker.RunWorkerAsync(parameter); 

희망!

+0

나는 dowork에 내 코드를 넣었지만 잘 작동하지 않는다. 나는 dowork에서 listview를 가지고 있으며 그것은 채워지지 않습니다. – user1005633

+0

할 일 목록보기의 목적은 무엇입니까? – lionheart

+0

나는 html을 구문 분석하고 html에서 가져온 내용으로 listview를 동적으로 만드는 메소드가 있습니다. RunWorkerCompleted에서 // 당신이 여기서 제어한다는 것을 어떻게 의미합니까? 거기에 내 UI 컨트롤을 업데이트 할 수 있습니까? 감사!! – user1005633

0

WPF 이후 배경 작업자를 더 이상 사용하지 않습니다. WinForms 용으로 만들어졌으며 WPF에서는 피해야한다고 들었지만 실수 할 수도 있습니다. 이 같은 다른 스레드에 접근 아무 문제가 없어야합니다 (일부 UI 컨트롤을하지) 매개 변수로 문자열을 전달하기 때문에 :

private void DoStuff(string documentName) 
{ 
    Action a =() => 
    { 
     var result = ParseFile(documentName); 
     Action b =() => 
     { 
      TextBox1.Text = result; 
     }; 
     Dispatcher.BeginInvoke(b); 
    }; 
    a.BeginInvoke(callback => 
    { 
     a.EndInvoke(callback); 
    }, null); 
} 

참고 : 루프 내에서 대표를 두지 마십시오을, 오히려 루프를 넣어 대의원 내부.

관련 문제