using System;
using System.Threading ;
namespace Recetas.Multithreading .Cap01
{
public sealed class UsoPropiedadThreadState
{
public static void Main( )
{
Thread threadNuevo = new Thread ( new ThreadStart ( ImprimirNumerosConRetraso) ) ;
// Antes de empezar la ejecución del thread, este es su estado:
Console.WriteLine ( "\n Estado antes de empezar la ejecución el thread: `{0}`." , threadNuevo.ThreadState .ToString ( ) ) ;
// Inicio de la ejecución del thread:
threadNuevo.Start ( ) ;
// Aborta el thread:
threadNuevo.Abort ( ) ;
// Nuevo estado del thread:
Console.WriteLine ( "\n Nuevo estado del thread: `{0}`." , threadNuevo.ThreadState .ToString ( ) ) ;
// Vuelve a iniciar el thread:
threadNuevo = new Thread ( ImprimirNumerosConRetraso) ;
threadNuevo.Start ( ) ;
// Espera a que la ejecución del thread `threadNuevo` finalice:
threadNuevo.Join ( ) ;
// Después de finalizar la ejecución del thread, este es su nuevo estado:
Console.WriteLine ( "\n Estado del thread `nuevoThread` después de finalizar su ejecución: `{0}`." , threadNuevo.ThreadState .ToString ( ) ) ;
}
private static void ImprimirNumerosConRetraso( )
{
Console.WriteLine ( "\n Estado actual del thread `nuevoThread`: `{0}`.\n " , Thread.CurrentThread .ThreadState .ToString ( ) ) ;
for ( int i = 0 ; i < 9 ; ++ i)
{
Thread.Sleep ( 1000 ) ;
Console.WriteLine ( "Valor actual de `i`: {0}" , i.ToString ( ) ) ;
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKbmFtZXNwYWNlIFJlY2V0YXMuTXVsdGl0aHJlYWRpbmcuQ2FwMDEKewogICAgcHVibGljIHNlYWxlZCBjbGFzcyBVc29Qcm9waWVkYWRUaHJlYWRTdGF0ZQogICAgewogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIFRocmVhZCB0aHJlYWROdWV2byA9IG5ldyBUaHJlYWQgKG5ldyBUaHJlYWRTdGFydCAoSW1wcmltaXJOdW1lcm9zQ29uUmV0cmFzbykpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQW50ZXMgZGUgZW1wZXphciBsYSBlamVjdWNpw7NuIGRlbCB0aHJlYWQsIGVzdGUgZXMgc3UgZXN0YWRvOgogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIlxuRXN0YWRvIGFudGVzIGRlIGVtcGV6YXIgbGEgZWplY3VjacOzbiBlbCB0aHJlYWQ6IGB7MH1gLiIsIHRocmVhZE51ZXZvLlRocmVhZFN0YXRlLlRvU3RyaW5nKCkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSW5pY2lvIGRlIGxhIGVqZWN1Y2nDs24gZGVsIHRocmVhZDoKICAgICAgICAgICAgdGhyZWFkTnVldm8uU3RhcnQoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFib3J0YSBlbCB0aHJlYWQ6CiAgICAgICAgICAgIHRocmVhZE51ZXZvLkFib3J0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBOdWV2byBlc3RhZG8gZGVsIHRocmVhZDoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJcbk51ZXZvIGVzdGFkbyBkZWwgdGhyZWFkOiBgezB9YC4iLCB0aHJlYWROdWV2by5UaHJlYWRTdGF0ZS5Ub1N0cmluZygpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFZ1ZWx2ZSBhIGluaWNpYXIgZWwgdGhyZWFkOgogICAgICAgICAgICB0aHJlYWROdWV2byA9IG5ldyBUaHJlYWQgKEltcHJpbWlyTnVtZXJvc0NvblJldHJhc28pOwogICAgICAgICAgICB0aHJlYWROdWV2by5TdGFydCgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRXNwZXJhIGEgcXVlIGxhIGVqZWN1Y2nDs24gZGVsIHRocmVhZCBgdGhyZWFkTnVldm9gIGZpbmFsaWNlOgogICAgICAgICAgICB0aHJlYWROdWV2by5Kb2luKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEZXNwdcOpcyBkZSBmaW5hbGl6YXIgbGEgZWplY3VjacOzbiBkZWwgdGhyZWFkLCBlc3RlIGVzIHN1IG51ZXZvIGVzdGFkbzoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJcbkVzdGFkbyBkZWwgdGhyZWFkIGBudWV2b1RocmVhZGAgZGVzcHXDqXMgZGUgZmluYWxpemFyIHN1IGVqZWN1Y2nDs246IGB7MH1gLiIsIHRocmVhZE51ZXZvLlRocmVhZFN0YXRlLlRvU3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIEltcHJpbWlyTnVtZXJvc0NvblJldHJhc28oKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoICJcbkVzdGFkbyBhY3R1YWwgZGVsIHRocmVhZCBgbnVldm9UaHJlYWRgOiBgezB9YC5cbiIsIFRocmVhZC5DdXJyZW50VGhyZWFkLlRocmVhZFN0YXRlLlRvU3RyaW5nKCkpOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyArK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRocmVhZC5TbGVlcCAoMTAwMCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lICgiVmFsb3IgYWN0dWFsIGRlIGBpYDogezB9IiwgaS5Ub1N0cmluZygpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQ==