Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Hashtable::Synchronized (Hashtable^)

 

Publicado: octubre de 2016

Devuelve un contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable.

Espacio de nombres:   System.Collections
Ensamblado:  mscorlib (en mscorlib.dll)

public:
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
static Hashtable^ Synchronized(
	Hashtable^ table
)

Parámetros

table
Type: System.Collections::Hashtable^

Hashtable que se va a sincronizar.

Valor devuelto

Type: System.Collections::Hashtable^

Contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable.

Exception Condition
ArgumentNullException

El valor de table es null.

El Synchronized método es seguro en subprocesos para varios lectores y escritores. Además, el contenedor sincronizado asegura que hay un único escritor escribir a la vez.

Enumerar una colección no es intrínsecamente un procedimiento seguro para subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, se puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.

En el ejemplo de código siguiente se muestra cómo bloquear la colección utilizando el SyncRoot durante toda la enumeración:

Hashtable^ myCollection = gcnew Hashtable();
bool lockTaken = false;

try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

Este método es una operación o (1).

En el ejemplo siguiente se muestra cómo sincronizar un Hashtable, determinar si un Hashtable está sincronizada y utilizar sincronizado Hashtable.

#using <system.dll>

using namespace System;
using namespace System::Collections;
void main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Creates a synchronized wrapper around the Hashtable.
   Hashtable^ mySyncdHT = Hashtable::Synchronized( myHT );

   // Displays the sychronization status of both Hashtables.
   Console::WriteLine( "myHT is {0}.", myHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdHT is {0}.", mySyncdHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
 This code produces the following output.

 myHT is not synchronized.
 mySyncdHT is synchronized.
 */

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: