Discussão do artigo "Criando interfaces gráficas baseadas no .Net Framework e C# (Parte 2): elementos gráficos adicionais" - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Foi detectado um erro muito grave ao trabalhar com janelas C#. Se você mover a janela C# continuamente, o Terminal desaparecerá da tela após alguns segundos, e a carga do núcleo da CPU do terminal64.exe excederá 100%. Tenho 8 núcleos, portanto a carga total do núcleo no TaskManager na CPU é de 12-13%. Quando a janela C# está se movendo, ela é de 19%.
Ah, isso é legal. Experimentei - ela realmente desaparece. Ou melhor, ela não desaparece, mas é minimizada na bandeja, como se você tivesse pressionado o botão "minimizar".
Quanto ao carregamento de 100%, não estou vendo isso. Talvez seja porque você o tenha integrado e eu não.
A remoção manual do GuiControllerElementsDemo pelo menu Terminal leva ao congelamento por alguns segundos.
Isso existe. Isso só acontece se o formulário não for fechado manualmente antes. Ainda não sei como contornar esse problema. Tentei fechar o formulário em Deinit() de várias maneiras, mas nenhuma delas funcionou. Se alguém souber como fazer isso, ficarei grato.
Há isso. Isso só acontece se você não fechar o formulário manualmente antes. Ainda não sei como contornar isso. Tentei várias maneiras de apagar o formulário em Deinit(), mas nenhuma delas funcionou. Se alguém souber como fazer isso, ficarei grato.
Por que o manipulador padrão private void Form2_FormClosing(object sender, FormClosingEventArgs e)
não quer funcionar?
Quando eu estava experimentando a dll e o C#, por algum motivo tudo travava na saída porque eu não destruía os componentes criados fora do próprio formulário, era assim que acontecia:
Se eu não destruísse antes de fechar o formulário do MQL, ele ficava terrivelmente lento ou travava.
Ah, legal. Experimentei e ele realmente desaparece. Ou melhor, ele não desaparece, mas é minimizado na bandeja, como se o botão "minimizar" tivesse sido pressionado.
Tentei mover a própria janela do Terminal (o C# não está em execução). Em cerca de 10 segundos, absolutamente todas as janelas (ME, navegadores, etc.) foram minimizadas, deixando a área de trabalho vazia.
Quanto ao carregamento de 100%, não estou vendo isso. Talvez seja porque você o tenha incorporado e eu não.
Ao mesmo tempo, monitorei a execução do Expert Advisor. Aqui está o resultado
Você pode ver claramente que o Expert Advisor interrompeu seu trabalho enquanto a janela do Terminal estava se movendo.
Ao mesmo tempo, monitorei a execução do Expert Advisor. Aqui está o resultado
Você pode ver claramente que o Expert Advisor interrompeu seu trabalho enquanto a janela do Terminal estava em movimento.
Fiz uma verificação no cronômetro - não vejo nenhuma interrupção. Ele envia tudo para o registro muito rapidamente.
e por que o manipulador padrão private void Form2_FormClosing(object sender, FormClosingEventArgs e)
não quer funcionar?
Quando eu estava experimentando com a dll e o C#, por algum motivo tudo travava na saída porque eu não destruía os componentes criados fora do próprio formulário, era assim que acontecia:
Se eu não destruísse antes de fechar o formulário do MQL, ele ficava terrivelmente lento ou travava.
Tentei fazer isso por meio do form.Dispose() padrão. Ou seja, quando GuiController::HideForm() é chamado, Dispose do formulário correspondente é chamado. Tudo funcionou bem no aplicativo de teste em C#. Mas não funciona no MT. Mas se fecharmos o formulário manualmente antes de excluir o Expert Advisor, tudo funcionará bem.
Tentei fazer isso por meio do form.Dispose() padrão. Ou seja, quando GuiController::HideForm() é chamado, Dispose do formulário correspondente é chamado. Tudo funcionou bem no aplicativo de teste em C#. Mas não funciona no MT. Mas se fecharmos o formulário manualmente antes de excluir o Expert Advisor, tudo funcionará bem.
Aqui ele é descarregado instantaneamente.
Ele descarrega instantaneamenteaqui.
Sim, eu vi seu painel. Que função você usa para descarregar?
Tentei fazer isso por meio do form.Dispose() padrão. Ou seja, quando GuiController::HideForm() é chamado, o Dispose do formulário correspondente é chamado. Tudo funcionou bem no aplicativo de teste em C#. Mas não funciona no MT. Mas se fecharmos o formulário manualmente antes de excluir o Expert Advisor, tudo funcionará bem.
Definitivamente, você deve pesquisar no Google, pois há algum processo em andamento.
Como alternativa, você ainda precisa chamar Form.Close() no Windows para fechar o aplicativo.
https://stackoverflow.com/questions/3097364/c-sharp-form-close-vs-form-dispose
Não chamar Close provavelmente evita o envio de várias mensagens Win32 que, em minha opinião, são importantes, embora eu não saiba dizer especificamente por quê...
O Close tem a vantagem de gerar eventos (que podem ser cancelados), de modo que uma pessoa de fora (do formulário) poderia observar o FormClosing e o FormClosed para reagir de acordo.
Não tenho certeza se o FormClosing e/ou o FormClosed são gerados se você simplesmente descartar o formulário, mas deixarei isso para você experimentar.
Sim, eu vi seu painel. Que função você usa para descarregar?
public static class FormsMT5 { private static Form1 MainForm; private static Form2 OrderForm; private static Thread ThreadMainform, ThreadOrderForm; .................... public static void FormDeinit(int reason) { if (reason == 3 || reason == 5) return; if (MainForm != null) { MainForm.Close(); } if (OrderForm != null) { OrderForm.Close(); } if (ThreadMainform != null) ThreadMainform.Join(); if (ThreadOrderForm != null) ThreadOrderForm.Join(); MainForm = null; OrderForm = null; ThreadMainform = null; ThreadOrderForm = null; }Sim, eu vi seu painel. Que função você usa para descarregar?
Esse é o painel do Igor. Acabei de publicá-lo.