Frage

Ich verwende C # mit Compact Framework 2, SP2.

Das Betriebssystem des Geräts wurde eingerichtet, um mit meiner Anwendung zu starten, lasst uns die Anwendung "loader.exe" anrufen.

loader ist einfach dies: Eine einzelne, einfache Form, mit der Statusmeldungen während des Ladens angezeigt wird, falls erforderlich (Layan-Bedingungen, für die ein Fehler und eine Ausnahmenachricht oder "Antragsanmeldung [XYZ]" oder "Startanwendung [XYZ]"), und eine staatliche Maschine läuft Im Hintergrund, während eine grundlegende Vollbildform angezeigt wird.

Der Konstruktor des Loader-Formulars hat an dem sehr ende folgende:

generasacodicetagpre.

und "runstatemachine" funktioniert an einem anderen Thread als die Benutzeroberfläche als die Benutzeroberfläche, sodass das Formular angezeigt werden kann, und jederzeit, wenn Runstatemachine mit dem Formular interagieren muss, z. B. Aktualisierungsnachrichten, nenne ich eine Funktion, die verwendet wird, wenn (dies.invokeresive ) {the.invoke (...);} else {...}

also mein problem?
Mein Programm hängt, mein Programm hängt, und es ist, weil der Timer keinen Rückruf ausgelöst hat. Ich fügte in der Debug-Nachricht in dem Versuch-Block oben hinzu, zusammen mit vielen anderen Orten, um mir zu sagen, wo es auflegte, einschließlich einer Nachricht zu Beginn der "Runstatemachine". Schließlich hing mein Programm an der Meldung "Start GUI Init Thread ..."

Das sagt mir, dass der Thread-Timer nicht mit der eins -zeit läuft, in der ich es brauche.
Meine Theorie ist, dass der Müll vor dem Timer gesammelt wird, der den Rückruf auslöst. Das würde bedeuten, wenn der Timer global war, und dann explizit entsandte, als ich nach Runstatemachine erbe

Gedanken?

War es hilfreich?

Lösung

meine Theorie ist, dass der Müll vor dem Timer gesammelt wird den Rückruf auslösen.Das würde bedeuten, wenn der Timer global war, und dann explizit entsorgt, als ich runstatemachine bekomme, dass es das ist Führen Sie perfekt an ... aber ich möchte nicht denken, dass ich es gelöst habe, nur um zu finden Das kommt zeitweise einen Monat ab.

Es sieht so aus, als ob Sie eine Bestätigung wünschen, dass dies Ihr Problem ist. ja, das ist das problem.

Der Timer wird in einer lokalen Variablen gespeichert, die niemals wieder verwendet wird.Dies macht es für GC berechtigt.Der GC'ing des Timers führt dazu, dass ein Abschluss zum Timer zu deaktiviert ist.

Ich schlage vor, Sie speichern den Timer in einem Instanzfeld Ihrer Form-Klasse und entfernen Sie es von dort, sobald der Rückruf abgefeuert wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top