Diskussion zum Artikel "Die Entwicklung von grafischen Oberflächen auf Basis von .Net Framework und C# (Teil 2): Weitere grafische Elemente" - Seite 2

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es wurde ein sehr schwerwiegender Fehler bei der Arbeit mit C#-Fenstern entdeckt. Wenn Sie C#-Fenster kontinuierlich bewegen, verschwindet Terminal vom Bildschirm nach ein paar Sekunden, und die CPU-Kernlast von terminal64.exe übersteigt 100%. Ich habe 8 Kerne, so dass die volle Kernlast im TaskManager bei CPU 12-13% beträgt. Wenn sich das C#-Fenster bewegt, sind es 19%.
Oh, das ist cool. Ich habe es ausprobiert - es verschwindet wirklich. Oder besser gesagt, es verschwindet nicht, sondern minimiert sich in die Taskleiste, als ob Sie die Schaltfläche "Minimieren" gedrückt hätten.
Was das 100%ige Laden angeht - ich sehe es nicht. Vielleicht liegt es daran, dass Sie es eingebaut haben und ich nicht.
Das manuelle Entfernen von GuiControllerElementsDemo über das Terminal-Menü führt zum Einfrieren für ein paar Sekunden.
So etwas gibt es. Es passiert nur, wenn das Formular nicht vorher manuell geschlossen wird. Ich weiß noch nicht, wie ich das Problem umgehen kann. Ich habe versucht, das Formular in Deinit() auf verschiedene Arten zu schließen, aber keine davon hat funktioniert. Wenn jemand weiß, wie man es macht, wäre ich dankbar.
Das ist es. Es passiert nur, wenn Sie das Formular nicht vorher manuell schließen. Ich weiß noch nicht, wie man es umgehen kann. Ich habe mehrere Möglichkeiten ausprobiert, das Formular in Deinit() zu löschen, aber keine davon hat funktioniert. Wenn jemand weiß, wie man es macht, wäre ich dankbar.
warum der Standard-Handler private void Form2_FormClosing(object sender, FormClosingEventArgs e)
nicht funktionieren will?
als ich mit dll und C# experimentierte, stürzte aus irgendeinem Grund alles beim Beenden ab, weil ich die erstellten Komponenten außerhalb des Formulars nicht zerstörte, so war es:
wenn ich nicht vor dem Schließen des Formulars von MQL zerstören - es verlangsamt schrecklich oder abgestürzt.
Oh, cool. Ich habe es ausprobiert und es verschwindet tatsächlich. Oder besser gesagt, es verschwindet nicht, sondern wird in die Taskleiste minimiert, als ob die Schaltfläche "Minimieren" gedrückt wurde.
Ich habe versucht, das Terminalfenster selbst zu verschieben (C# läuft nicht). Innerhalb von etwa 10 Sekunden wurden alle Fenster (ME, Browser usw.) minimiert, so dass der Desktop leer war.
Wie für 100% Laden - ich sehe es nicht. Vielleicht liegt es wirklich daran, dass Sie es eingebaut haben und ich nicht.
Gleichzeitig habe ich die Ausführung des Expert Advisors überwacht. Hier ist das Ergebnis
Sie können deutlich sehen, dass der Expert Advisor seine Arbeit eingestellt hat, während sich das Terminal-Fenster bewegt hat.
Gleichzeitig habe ich die Ausführung des Expert Advisors überwacht. Hier ist das Ergebnis
Sie können deutlich sehen, dass der Expert Advisor seine Arbeit eingestellt hat, während sich das Terminal-Fenster bewegt hat.
Ich habe eine Überprüfung durch den Timer gemacht - ich sehe keine Hänger. Er sendet alles sehr schnell an das Protokoll.
und warum der Standard-Handler private void Form2_FormClosing(object sender, FormClosingEventArgs e)
nicht funktionieren will?
als ich mit dll und C# experimentierte, stürzte aus irgendeinem Grund alles beim Beenden ab, weil ich die erstellten Komponenten außerhalb des Formulars selbst nicht zerstörte, so war es:
Wenn ich nicht vor dem Schließen des Formulars von MQL zerstören, es verlangsamt schrecklich oder abgestürzt.
Ich habe versucht, durch die standard form.Dispose() zu tun. Das heißt, wenn GuiController::HideForm() aufgerufen wird, wird Dispose des entsprechenden Formulars aufgerufen. In der Testanwendung in C# funktionierte alles gut. Aber in MT funktioniert es nicht. Aber wenn wir das Formular manuell schließen, bevor wir den Expert Advisor löschen, funktioniert alles einwandfrei.
Ich habe versucht, es über die Standardform.Dispose() zu tun. Das heißt, wenn GuiController::HideForm() aufgerufen wird, wird das Dispose des entsprechenden Formulars aufgerufen. In der Testanwendung in C# hat alles gut funktioniert. Aber in MT funktioniert es nicht. Aber wenn wir das Formular manuell schließen, bevor wir den Expert Advisor löschen, funktioniert alles einwandfrei.
Hier wird er sofort entladen.
Es entlädt sichhier sofort.
Ja, ich habe Ihr Panel gesehen. Welche Funktion verwenden Sie zum Entladen?
Ich habe versucht, es über die Standardform.Dispose() zu tun. Das heißt, wenn GuiController::HideForm() aufgerufen wird, wird das Dispose des entsprechenden Formulars aufgerufen. In der Testanwendung in C# hat alles gut funktioniert. Aber in MT funktioniert es nicht. Aber wenn wir das Formular manuell schließen, bevor wir den Expert Advisor löschen, funktioniert alles einwandfrei.
Sie sollten auf jeden Fall googeln, es gibt einen Prozess, der hier herumhängt.
Alternativ dazu müssen Sie noch Form.Close() für Windows aufrufen, um die Anwendung zu schließen.
https://stackoverflow.com/questions/3097364/c-sharp-form-close-vs-form-dispose
Wenn man Close nicht aufruft, umgeht man wahrscheinlich das Senden einer Reihe von Win32-Nachrichten, von denen man annehmen könnte, dass sie irgendwie wichtig sind, obwohl ich nicht genau sagen könnte, warum...
Close hat den Vorteil, dass es Ereignisse auslöst (die abgebrochen werden können), so dass ein Außenstehender (des Formulars) auf FormClosing und FormClosed achten könnte, um entsprechend zu reagieren.
Mir ist nicht klar, ob FormClosing und/oder FormClosed ausgelöst werden, wenn Sie das Formular einfach entsorgen, aber ich überlasse es Ihnen, damit zu experimentieren.
Ja, ich habe Ihr Panel gesehen. Welche Funktion verwenden Sie zum Entladen?
Ja, ich habe Ihr Panel gesehen. Welche Funktion verwenden Sie zum Entladen?
Das ist das Panel von Igor. Ich habe es gerade veröffentlicht.