2014-06-25 1 views
-3

이더넷 케이블을 통해 패킷을 캡처하는 GUI를 개발했습니다. 이 목적을 위해 별도의 스레드에서 각 함수를 실행하고 3 별도의 함수가 있습니다.실행 중 GUI가 멈춤

1) public void Capture_Click(object sender, EventArgs e) //packet capturing 

2) public static void PacketHandler(Packet packet) // storing received packets and showing in dataGrid 

3) public void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e) // I have Kept a button on each row to get packet details in more detail. 

문제 : 거기에 아무런 문제가 없지만 곧 패킷으로 GUI를 오는 지금은 데이터 그리드에 상세 버튼을 클릭 할 수없는 나는 정지 중지하는 것이 패킷이오고있다합니다.

은 가능한 해결책을 제안합니까?

+0

이러한 함수가 개별 스레드에서 얼마나 많이 실행되는지는 분명하지 않습니다. 질문에 대한 충분한 코드를 제공하지 않았습니다. 또한 세 가지 모든 스레드에서 UI 작업을 수행하는 방법이 명확하지 않습니다. –

+0

@DavidHeffernan public Thread StartTheThread (object sender, EventArgs e) { var t = new Thread (() => Capture_Click (sender, e))를 사용하여 각 함수에 대해 새 스레드를 만듭니다. t.Start(); return t; } –

+0

이상하게 보이지는 않지만 의견에 쓰여진 제한된 발췌 부분을 제공 할 수있는 것은 거의 없습니다. –

답변

0

당신은 당신의 UI 스레드 (심령 디버깅) 패키지를 받고있는 것 같습니다. 해결책은 배경 작업자에게이 작업을 수행하는 것일 수 있습니다. 이렇게하면 사용자의 수신 패키지를 동시에 업데이트하고 수신/처리 할 수 ​​있습니다.

MSDN Backgroundworker MSDN에서

다음 BackgroundWorker 구성 클래스는 당신이 별도의 전용 스레드에서 작업을 실행할 수 있습니다. 다운로드 및 데이터베이스 트랜잭션과 같이 시간이 많이 소요되는 작업으로 인해 사용자 인터페이스 (UI)가 실행 중일 때 응답하지 않는 것처럼 보이는 이 나타날 수 있습니다. 반응 형 UI를 원할 때 이러한 작업을 통해 과 관련된 긴 지연이 발생할 경우 BackgroundWorker 클래스는 편리한 솔루션을 제공합니다.

+0

이벤트 처리에 대해 잘 모릅니다. 어떻게 백그라운드 작업자를 사용할 수 있습니까? –

+0

msdn 설명서를 살펴보십시오. 나는 그것이 어떻게 작동 하는지를 설명하는데있어서 매우 완전하다. – Peter

+0

백그라운드 작업자와 다른 방법으로 해결할 수 있습니까? –