question

C#.NET - erro ao criar o identificador de janela

Então eu estou trabalhando em um programa muito grande, mas eu ocasionalmente recebo este erro:

System.ComponentModel.Win32Exception: Erro criando identificador de janela.

Ele normalmente surge antes que o programa ainda carrega. Eu já fiz algumas pesquisas, e o conscensus parece ser que este erro significa que ter esgotado todos os manipuladores de 1000 janela que um aplicativo pode usar...

Assim minha pergunta: existe uma maneira de olhar para cima quantas manipuladores de windows um aplicativo específico está usando? Eu sei que você pode ir para o Gerenciador de tarefas e em desempenho, você pode ver o número total de manipuladores... mas eu estou tentando descobrir uma maneira de determinar um número exato (ish) a qualquer momento...

Ou se alguém sabe uma maneira de definir o limite superior a 1000, que seria grande demais...

E eu iria redesenhar o software para usar menos manipuladores em primeiro lugar, mas o seu um enorme programa e ele provavelmente levaria um ano ou dois para reprogramar it... assim que eu preferiria fazer não que...
resposta Resposta
"Identificador de janela de criação de erro" Este é um dos erros mais agravantes na programação do Windows. Eu acho que ainda pior do que um favorito VB6 "objeto não existe." I got it hoje ao carregar um formulário que é parte de uma app VS2003 que converti ao VS2005. Levei um tempo para chegar ao fundo por que esse erro foi sendo lançado (durante a depuração e também em uma máquina cliente) uma vez que é proveniente de Win32, não.NET.

No meu caso, ele descobriu que o acusado tinha algo a ver com a criação de ícones, embora isso não era óbvio porque eu poderia passar pelo mesmo essa seção de código sem problemas. O erro foi lançado após o formulário tinha executar através dele é o método load e é no caminho de volta para a linha de código que instanciado o formulário. Estranhamente, ela foi chamada de método que não precisa mesmo de estar lá, possivelmente um acidental copiar/colar em algum ponto. Mas foi na versão VS2003 por um longo tempo e não causou nenhum problema. Quando eu apagar o código específico (feliz por ter tal uma fácil fora!), tudo funcionou novamente.

Assim, em retrospectiva, tudo isso faz todo o sentido. VS2005 e.NET 2.0, como já observei em posts anteriores (tendo aprendido duros), é muito mais sensível sobre a interface do usuário problemas de threading. Isso é uma coisa boa e me ajudou a limpar algum código que VS2003 deixe-me começar afastado com (mais falta de compreensão do que qualquer coisa). Ícones são arquivos de imagem - objetos aka não gerenciados. Por isso mesmo que eu não estava recebendo qualquer coisa útil sobre onde o problema foi vindo e que o problema era exatamente, as pistas foram todos lá.

"Erro criando identificador de janela" é um erro do Win32, por conseguinte, a primeira coisa que eu deveria ter olhado foi qualquer código que fez alguma coisa com itens não gerenciados. Eu realmente pensou que logo no início, mas esquecido essa chamada de método específico e fui em uma perseguição de ganso selvagem por um tempo.

Comentários Comentários

Guest
Rita na 8 Out 2023
5
A mensagem de erro que você está recebendo no seu programa C#.NET indica que o número máximo de manipuladores de janelas permitido foi atingido, que é 1000. Isso é um problema comum em aplicativos grandes e complexos que lidam com muitas janelas abertas e fechadas. Para verificar o número exato de manipuladores de janelas que o seu aplicativo está usando, você pode usar ferramentas como o Process Explorer ou o Microsoft's Spy++. Ambas as ferramentas permitem que você monitore e gerencie os manipuladores de janelas em execução. Além disso, você pode tentar configurar o limite superior de manipuladores de janelas para mais de 1000, mas isso pode levar a outros problemas de desempenho. Uma abordagem alternativa seria redesenhar o software para usar menos manipuladores de janelas, mas entendo que isso seria um grande desafio dada a magnitude do programa. Espero que essas sugestões sejam úteis para resolver o problema que você está enfrentando.

O seu comentário
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved