Compartir a través de


Consideraciones sobre subprocesos de biblioteca administrada

Las siguientes consideraciones de subproceso de pc tableta son específicas de la biblioteca administrada.

Thread-Safety

Las clases de biblioteca administrada de tablet PC Platform no suelen ser seguras para subprocesos. Las siguientes colecciones son seguras para subprocesos en el nivel de miembro; Sin embargo, estas colecciones no garantizan que un enumerador esté protegido si otro subproceso funciona en la colección simultáneamente:

Aplicaciones STA y MTA

Las aplicaciones administradas creadas mediante los asistentes contenidos en Microsoft Visual Studio .NET son de un solo subproceso (STA) de forma predeterminada. Puede cambiar el apartamento de la aplicación estableciendo el atributo de subproceso sta o de apartamento multiproceso (MTA) en el punto de entrada de la aplicación.

Si la aplicación se ejecuta en un MTA, debe escribir código seguro para subprocesos; sin embargo, al hacerlo, puede mejorar ciertos problemas de rendimiento de control de eventos.

Para obtener más información sobre el subproceso STA y los atributos de subproceso de MTA, vea Clase STAThreadAttribute y Clase MTAThreadAttribute .

consideraciones sobre subprocesos de Windows Forms

Los controles InkPicture y InkEdit amplían los controles Windows Forms. Windows Forms controles usan el modelo de apartamento de un solo subproceso (STA) porque Windows Forms se basan en ventanas nativas de Win32 que son intrínsecamente un solo subproceso. En el código administrado, los controles de entrada de lápiz deben crearse en el mismo subproceso que el subproceso principal del formulario.

En una aplicación STA, ciertos eventos se producen en un subproceso distinto del subproceso de la interfaz de usuario (UI) de la aplicación. Al llamar a cualquier objeto o control de Windows Forms, incluidos los controles InkPicture y InkEdit, desde un controlador de eventos tablet PC, use el objeto o el método Control.Invoke heredado del control. La propiedad InvokeRequired , heredada de la clase Control, se puede usar para determinar si es necesario.

Por ejemplo, en el siguiente controlador de eventos para el evento Recognition , se prueba la propiedad InvokeRequired y, si es TRUE, el controlador de eventos se vuelve a invocar desde el subproceso de la interfaz de usuario.

void recoContext_Recognition(object sender, 
        RecognizerContextRecognitionEventArgs e)
{
    if (InvokeRequired)
    {
        Invoke( new RecognizerContextRecognitionEventHandler(  
                     recoContext_Recognition ),
                    new object[] { sender, e } );
        return;
    }
     // Use the recognition result here.
}

Si coloca un UserControl en una página web en un explorador (vea Controles web), se ejecuta como una aplicación STA. Para las aplicaciones cliente inteligentes (consulte No Touch Deployment), el desarrollador tiene control total sobre ApartmentState. (El valor predeterminado suele ser STA, pero puede ser MTA, dependiendo de la versión de CLR). Para ver los problemas de subproceso relacionados con RealTimeStylus, consulte Consideraciones de subprocesos para las API de StylusInput.

Para obtener más información sobre cómo llamar a Windows Forms desde una aplicación MTA, consulte Ejemplo de control de Windows Forms multiproceso.

Consideraciones sobre el Portapapeles

El objeto Portapapeles solo funciona desde un subproceso STA. Al intentar copiar o pegar desde el Portapapeles desde un subproceso que no es STA, se obtiene threadStateException. Si la aplicación es MTA, cree un subproceso STA para controlar las llamadas al método del Portapapeles y algunos de los otros aspectos de la interfaz de usuario de la aplicación.

Excepciones en controladores de eventos

No se pueden producir excepciones desde los controladores de eventos de tablet PC. Por ejemplo, si un delegado de controlador de eventos para un objeto o colección de Tablet PC tiene tres controladores registrados y el primero inicia una excepción, se produce la siguiente secuencia:

  1. El primer controlador sale.
  2. Se pierde la excepción.
  3. No se invocan los controladores restantes.

Eliminación de objetos y controles

Para evitar una pérdida de memoria, debe llamar explícitamente al método Dispose en cualquier objeto o control tablet PC al que se haya asociado un controlador de eventos antes de que el objeto o control salga del ámbito.

Para mejorar el rendimiento de la aplicación, elimine manualmente cualquier objeto o control tablet PC que implemente el método Dispose cuando el objeto o control ya no sea necesario.

API de StylusInput

Para obtener información sobre las consideraciones de subproceso para el objeto RealTimeStylus y las interfaces de programación de aplicaciones (API) stylusInput, consulte Consideraciones de subprocesos para las API de StylusInput.