특정 COM 메서드 호출에 대해 우리가 가지고있는 서비스 (C#으로 작성 됨)에 대한 고정 시간을 설정해야했습니다. Thread.Sleep
이외의 System.Threading
네임 스페이스를 사용하는 데 아니, 나는 연극이 있고 프로토 타입과 함께 올라와있다 :이 방법C# 코드에서 COM 메서드 호출을 효과적으로 시간 종료하는 방법
bool _comCallSuccessful = false;
bool _timedOut = false;
private void MakeACOMCallThatCouldTakeALongTime()
{
Thread.Sleep(2500);
_comCallSuccessful = true;
}
private void CheckForOneSecondTimeOut()
{
Thread.Sleep(1000);
_timedOut = true;
}
private void ThreadTester()
{
Thread t1 = new Thread(new ThreadStart(MakeACOMCallThatCouldTakeALongTime));
Thread t2 = new Thread(new ThreadStart(CheckForOneSecondTimeOut));
t1.Start();
t2.Start();
while (!_timedOut && !_comCallSuccessful) { }
if (_comCallSuccessful)
{
Console.WriteLine("Finished!");
}
else
{
t1.Abort();
Console.WriteLine("Timed out!");
}
Console.ReadLine();
}
실질적으로 말하기, 거기 어떤 문제? 예를 들어 COM 메서드 호출을 만드는 스레드를 중단하려는 경우 (예 : 사용 된 리소스를 정리하는 등) 문제가 있습니까?
좋은 지점에서 작업을 취소 할 수있는 명시 적 방법이있을 것이다. – jpoh