我必須設置一個固定的超時爲特定的COM方法調用從我們有一個服務(這是用C#編寫的)。由於沒有使用System.Threading
命名空間比Thread.Sleep
其他任何東西,我有一齣戲,並想出了一個工作原型:如何有效地超時從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方法的線程(也許是在清理使用的資源等方面),會不會有問題?
約Thread.Abort的不能夠放棄本地代碼調用好點的取消操作。 – jpoh 2009-10-05 02:20:13