Este artigo passo a passo mostra como submeter um método para o conjunto de threads para execução.
No ambiente. NET, cada processo tem um conjunto de threads que pode utilizar para executar métodos de modo assíncrono.
Requisitos
A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs são necessários:
- Microsoft Visual Studio .NET ou o Microsoft Visual Studio 2005
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
- O Visual C# linguagem de programação
Criar uma aplicação Visual C# que utiliza o conjunto de threads
- Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
- Crie um novo projecto de aplicação do Windows do Visual C# denominado PoolDemo.
- Utilize a caixa de ferramentas dos controlos para adicionar um controlo de botão ao formulário. O nome predefinido do controlo de botão é button1.
- Clique com o botão direito do rato no formulário e, em seguida, clique em Código .
- Cole a seguinte directiva utilizando depois das directivas existente utilizando o , mas antes da declaração do espaço de nomes PoolDemo :
- Voltar à vista de estrutura e, em seguida, faça duplo clique button1 . Cole o seguinte código no processador de eventos button1_Click :
private void button1_Click(object sender, System.EventArgs e)
{
WaitCallback wcb = new WaitCallback(GetSysDirSize);
try
{
ThreadPool.QueueUserWorkItem(wcb);
MessageBox.Show("The work item has been placed on the queue");
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
- Cole o seguinte código no corpo da classe Form1 . O método GetSysDirSize calcula o número total de bytes armazenados no directório do sistema. GetSysDirSize chama outro método chamado DirSize para efectuar o cálculo.
Nota : esta tarefa pode demorar algum tempo para ser executado.
private void GetSysDirSize(object state)
{
long total_length = DirSize(Environment.SystemDirectory);
this.Text = total_length.ToString();
}
private long DirSize(string path)
{
long sz = 0;
System.IO.DirectoryInfo d = new System.IO.DirectoryInfo(path);
// List files.
foreach(System.IO.FileInfo f in d.GetFiles())
{
sz += f.Length;
}
// Recurse into directories.
foreach(System.IO.DirectoryInfo dx in d.GetDirectories())
{
sz += DirSize(dx.FullName);
}
return sz;
}
Testar o exemplo
- Prima CTRL + F5 para executar a aplicação.
- Quando o formulário for apresentado, clique no botão. Quando aparecer a caixa de mensagem que o item de trabalho foi colocado na fila , clique em OK para fechar a caixa de mensagem e regressar ao formulário principal. Depois de um pequeno atraso, o tamanho total do ficheiro no directório do sistema é apresentado na legenda do formulário. O comprimento do atraso depende da velocidade do computador e o número de ficheiros no directório do sistema. Cálculo de tamanhos de ficheiros ocorre num thread no conjunto de threads.
Artigo: 315460 - Última revisão: segunda-feira, 11 de Dezembro de 2006 - Revisão: 2.3
A informação contida neste artigo aplica-se a:
- Microsoft Visual C# 2005 Express Edition
- Microsoft Visual C# .NET 2002 Standard Edition
| kbmt kbhowtomaster kbsample kbthread KB315460 KbMtpt |
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo:
315460
(http://support.microsoft.com/kb/315460/en-us/
)