Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As seguintes considerações sobre o encadeamento do Tablet PC são específicas da Biblioteca Gerida.
- Segurança de Threads
- Aplicações STA e MTA
- Considerações sobre subprocessamento do Windows Forms
- Considerações sobre a área de transferência
- Exceções em manipuladores de eventos
- Eliminação de objetos e controlos
- APIs de Entrada com Caneta
Thread-Safety
As classes de Biblioteca Gerenciada da Plataforma Tablet PC geralmente não são thread-safe. As seguintes coleções são thread-safe ao nível de membro; no entanto, essas coleções não garantem que um enumerador esteja protegido se outro thread operar na coleção ao mesmo tempo.
Aplicações STA e MTA
As aplicações geridas criadas utilizando os assistentes contidos no Microsoft Visual Studio .NET são, por defeito, em modo STA (Single-Threaded Apartment). Você pode alterar o apartamento para seu aplicativo definindo o atributo thread STA ou apartamento multithreaded (MTA) no ponto de entrada do seu aplicativo.
Se seu aplicativo é executado em um MTA, você deve escrever código thread-safe; No entanto, ao fazer isso, você pode melhorar determinados problemas de desempenho de manipulação de eventos.
Para obter mais informações sobre os atributos de thread STA e MTA, consulte STAThreadAttribute class e MTAThreadAttribute class.
Considerações sobre threading do Windows Forms
Os controles InkPicture e InkEdit estendem os controles do Windows Forms. Os controles do Windows Forms usam o modelo de apartamento de thread único (STA) porque os Windows Forms são baseados em janelas Win32 nativas que são inerentemente de thread único. No código gerenciado, os controles de tinta devem ser criados no mesmo thread que o thread principal do formulário.
Em um aplicativo STA, certos eventos acontecem em um thread diferente do thread da interface do usuário (UI) do aplicativo. Ao chamar qualquer objeto ou controle do Windows Forms, incluindo os controles InkPicture e InkEdit, de dentro de um manipulador de eventos do Tablet PC, use o método herdado Control.Invoke do objeto ou controle. A propriedade InvokeRequired, herdada da classe Control, pode ser usada para determinar se isso é necessário.
Por exemplo, no manipulador de eventos a seguir para o evento Recognition, a propriedade InvokeRequired é testada e, se TRUE, o manipulador de eventos é invocado novamente a partir do thread da interface do usuário.
void recoContext_Recognition(object sender,
RecognizerContextRecognitionEventArgs e)
{
if (InvokeRequired)
{
Invoke( new RecognizerContextRecognitionEventHandler(
recoContext_Recognition ),
new object[] { sender, e } );
return;
}
// Use the recognition result here.
}
Se você colocar um UserControl em uma página da Web em um navegador (consulte Web Controls), ele será executado como um aplicativo STA. Para aplicações cliente inteligente (consulte No Touch Deployment), o programador tem total controlo sobre o ApartmentState. (O padrão geralmente é STA, mas pode ser MTA, dependendo da sua versão do CLR.) Para questões de threading envolvendo o RealTimeStylus, consulte Considerações de Threading para as APIs StylusInput.
Para obter mais informações sobre como chamar Windows Forms de um aplicativo MTA, consulte Exemplo de controle do Windows Forms multithreaded.
Considerações sobre a área de transferência
O objeto área de transferência funciona somente de um thread STA. Ao tentar copiar ou colar da área de transferência de um thread que não é STA, você obtém um ThreadStateException. Se a sua aplicação for MTA, crie uma thread STA para manipular as chamadas de método da área de transferência e alguns dos outros aspetos da interface do utilizador da sua aplicação.
Exceções em manipuladores de eventos
As exceções não podem ser lançadas de dentro dos manipuladores de eventos do Tablet PC. Por exemplo, se um delegado de manipulador de eventos para um objeto ou coleção do Tablet PC tiver três manipuladores registrados e o primeiro lançar uma exceção, ocorrerá a seguinte sequência:
- O primeiro manipulador sai.
- Perde-se a exceção.
- Os manipuladores restantes não são invocados.
Descartando objetos e controles
Para evitar um vazamento de memória, você deve chamar explicitamente o método Dispose em qualquer objeto ou controle do Tablet PC ao qual um manipulador de eventos tenha sido anexado antes que o objeto ou controle saia do escopo.
Para melhorar o desempenho em seu aplicativo, descarte manualmente qualquer objeto ou controle do Tablet PC que implemente o método Dispose quando o objeto ou controle não for mais necessário.
StylusInput APIs
Para obter informações sobre considerações de encadeamento para o objeto RealTimeStylus e as interfaces de programação de aplicações (APIs) StylusInput, consulte Considerações de encadeamento para as APIs StylusInput.