2010-03-05 3 views
3

여기 내 문제가 있습니다 : 내가 만든 관리되지 않는 DLL이 있습니다.이 DLL 함수 중 하나를 PInvoke를 사용하여 C# 코드에서 호출합니다. 특정 조건에서 dll 함수에서 function.How를 실행하는 스레드를 종료 할 수 있어야합니다. 이 바보 같은 질문이지만, 내가 제대로 이해하는 경우 :C# 스레드 내에서 관리되지 않는 DLL의 함수 실행

+0

다른 스레드에서 죽이기를 오래 실행중인 스레드가 있습니까? 또는 시작한 스레드를 정리하는 방법을 모르십니까? –

+0

나는 잠재적으로 위험한 함수를 별도의 스레드에서 실행하여 주 스레드의 스택을 손상시키지 않습니다. 문제가 발생하면 주 스레드로 메시지를 전달하는 방법을 모르므로 손상된 스레드를 제거하십시오. –

답변

3

사람, 위험합니다. 왜 스레드를 종료합니까? 통화를 마샬링하는 방법에 따라 소유하지 않은 스레드에있을 수 있습니다. 어느 쪽이든 최선의 방법은 스레드를 종료하고 관리되는 코드를 정상적으로 처리하도록 지정하는 것입니다. 네이티브 코드에서 스레드를 죽이지 마십시오.

3

스레딩에 관해서 나는 총 멍청한 놈이야 경우

죄송합니다, 당신의 상황은

(간결을위한 의사 코드를 사용하여)이 같다
C# 
== 

Main() 
{ 
    StartNewThread(MyThread); 
    DoStuff(); 
} 

MyThread() 
{ 
    UnmanagedDll.DoSomething(); 
} 

Unmanaged DLL 
============= 
DoSomething() 
{ 
    // Does something here 
} 

맞습니까?

그렇다면 UnmanagedDll.DoSomething()에서 반환하면 UnmanagedDll.DoSomething() 호출 후 문이 없으면 호출 스레드가 종료됩니다. C# 프로그램으로 제어권을 되돌려주십시오.

귀하의 상황이 아닌 경우 자세한 내용을 제공해주십시오.

0

관리되지 않는 DLL 함수에서 특수 결과를 다시 전달하고 (특수 반환 값을 감지 한 경우) C#에서 스레드를 종료합니다. DLL에서 종료하는 것은 나에게 정말로 나쁜 생각처럼 들린다.

관련 문제