Si no desea bloquear el hilo principal puede utilizar un System.Threading.Timer:
private Thread _thread;
void Main(string[] args)
{
_thread = new ThreadStart(ThreadEntry);
_thread.Start();
Timer timer = new Timer(Timeout,null,30000,Timeout.Infinite);
}
void ThreadEntry()
{
int result = obj.PerformInitTransaction();
}
void TimeOut(object state)
{
// Abort the thread - see the comments
_thread.Abort();
throw new ItTimedOutException();
}
Jon Skeet tiene una forma menos contundente (Shutting Down Worker Threads Gracefully) de detener el hilo de abortar.
Sin embargo, como usted no tiene el control de las operaciones que hace PerformInitTransaction()
, no hay mucho que pueda hacer cuando Abort falla y deja el objeto en un estado no válido. Como se mencionó, si puede limpiar cualquier cosa que haya dejado PerformInitTransaction
, puede hacerlo capturando el ThreadAbortException
, aunque como es una llamada de un tercero, significará adivinar el estado en el que dejó el método.
El PerformInitTransaction
realmente debería ser el que proporcione el tiempo de espera.
@Bomboca: me removió su edición, el 'Exception' estoy lanzando no debe ser un' ThreadAbortException', que es algo tirado por el CLR cuando una llamada para 'Abortar' está hecho. –
perdón por eso y gracias por la entrada :) –
Es una llamada de bloqueo, si necesita el hilo principal, ¡haga otras cosas en este momento, esto no funcionará! – feldeOne