2012-08-23 2 views
5

USB를 통해 연결된 장치에서 몇 가지 작업을 수행 할 Windows Forms 응용 프로그램을 개발 중입니다. 읽기, 쓰기 및 기타 작업과 같은 모든 작업에는 사용자 정의 라이브러리가 있습니다.차단 호출에서 멈춘 스레드 중지

쓰기 작업은 사용자가 버튼을 눌렀을 때 수행됩니다.

읽기 위해 별도의 스레드가 만들어집니다. 사용 가능한 라이브러리의 문제점은 읽기 호출이 차단되고 INFINITE Timeout이 있음을 의미합니다.

연결에 실패 할 경우이 함수는 데이터를받는 경우에만이 함수가 중단되므로 읽기 함수 호출에 멈추었습니다.

그런 시나리오에서이 스레드를 죽이는 방법은 무엇이 있을까요? Thread.Abort()가 작동하지 않습니다.

이 프로그래밍에서는 C#을 사용하고 있습니다.

+1

, 솔직히, 그것을 버리고 다른 것을 사용한다. – Clemens

+0

알아요 .... 할 수 있었으면 좋겠어 ...하지만 C#의 기본 직렬 포트 클래스의 경우도 마찬가지입니다. Timeout을 Infinte로 설정하면 읽기 작업이 실패한 연결에서 멈 춥니 다. – Swanand

+0

당신이 읽으려는 내용에 "핸들"을 닫으려고 시도 할 수 있습니다 ... 그러면 내가 추측해야 할 Read가 취소 될 것입니다 ... 쓰여지는 방법에 따라 스레드가 종료 될 수 있습니다. –

답변

1

당신의 읽기 방법이 스레드가 중단되지 않도록 원시 코드를 호출했을 가능성이 있습니다. COM interop을 사용하는 스레드를 중단하는 방법은 없습니다 (최소한 익숙합니다). 당신은 왜 스레드 읽기 스레드를 차단하는지 먼저 볼 수 있습니다. Read 메서드를 호출하기 전에 요구 사항을 확인하십시오.

이 질문에 봐 : "사용자 지정 라이브러리"어떤 *이 실패한 연결에서 읽을 차단을 취소하는 것을 의미 * 제공하지 않는 경우 Abort call to unmanaged DLL

+0

별도의 프로세스에서 실행하는 것은 내가 고려하고있는 것입니다. 나는 또한 당신이 "머리를 맞출 수있을 것"이라고 생각한 다른 앱 도메인에서 위험한 코드를 실행할 수 있다고 생각하고 있었지만 스레드 문제를 중단하는 데 같은 실패가 발생했습니다. http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx –

+0

아이디어를 제공해 주셔서 감사합니다! 그러나 다른 프로세스에서 하나의 스레드 만 실행하는 방법은 무엇입니까? 또는 다른 프로세스로 함수 실행하기 ?? – Swanand

+0

COM interop (usb 통신)을 처리하고 해당 응용 프로그램을 프로세스로 시작하는 다른 응용 프로그램을 만들 수 있습니다. 그런 다음 파이프를 통해 해당 프로세스와 통신 할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx –