2011-05-13 2 views
0

C# 코드는 C++ dll에서 속성 값을 검색하고이 검색은 dll이 값을 반환 할 때까지 현재 스레드를 차단합니다. 디버그 모드에서 검색에 오랜 시간이 걸리면 MDA에서 ContextDeadlockSwitch를 발생시킵니다.런타임시 ContextDeadlockSwitch 감지

런타임에 ContextDeadlockSwitch를 잡을 수는 없지만 MDA와 비슷한 메커니즘이 C#이이 교착 상태를 감지하기 위해 catch 할 수있는 유사한 예외를 throw 할 수있는 방법이 있습니까?

이유는 C# 코드가 사용자에게 몇 초 더 기다리거나 앱을 강제 종료하고 다시 시작하라는 메시지를 표시하도록하는 것입니다.

답변

1

신호 완료를 위해 ManualResetEvent에서 대기 시간 제한을 사용하여 다른 스레드에서 C++ dll로 호출을 수행 할 수 있습니다. 시간 초과가되면 사용자에게 계속할 것인지 묻습니다. DLL의 COM 개체가 STA에있는 경우 점심 식사를 마칠 때 GUI 스레드가 멈추지 않도록하려면 마샬링 된 아파트에 개체를 만들어야합니다.