Wie kann ich erkennen, auszusetzen auf Windows Mobile?
Sehen wir einige gelegentliche Datenverlust mit unserer Anwendung, die auf Windows Mobile, und wir vermuten, dass einige gepufferten Daten nicht auf den Datenträger geleert werden, wenn sich das Gerät Aufhängen. Wir würden gerne manuell Spülen von Daten auf die Festplatte, wenn das Gerät über auszusetzen. Auf Windows, wir tun dies durch den Fang der WM_POWERBROADCAST
Botschaft, aber diese Botschaft ist nicht verfügbar auf Windows Mobile. Ich fand ein zwei Jahre altes Zitat auf ein message-board, die sagte:
Sie brauchen, um zu realisieren, dass Sie sind *nicht* garantiert, dass Sie benachrichtigt werden, der die suspend - *bevor* Sie wieder Erwachen. Das ist, erhalten Sie möglicherweise nicht die Meldung erst, nachdem das Gerät wieder zum Leben erweckt. Im Allgemeinen sollten Sie nicht versuchen, zu reagieren, zu suspendieren, weil dieser Beschränkung (und die Beschränkung auf das, was Sie tun können, in Reaktion auf das Ereignis, sowieso).
Ist das (noch) gilt für alle Geräte? Gibt es eine Möglichkeit, dies können wir tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Zitat (das klingt wirklich, wirklich vertraut) ist immer noch wahr. Die einzigen Komponenten, die garantiert in der Lage sein, Ihre Arbeit abschließen, bevor auszusetzen, sind Fahrer, und Sie haben eine bedeutende Reihe von Beschränkungen.
Die Allgemeine Idee hinter einem suspend ist transparent für die Anwendung, und immer vor, dass in der Regel nicht eine gute Idee.
Soweit ich weiß, Sie sind richtig, dass Sie nicht erkennen können, wenn ein Gerät geht in den suspend-Modus, nur wenn es rauskommt mit dem CeRunAppAtEvent API.
Einen besseren Ansatz für das problem ist zu versuchen, zu verhindern, dass das Gerät anhalten um kritische Teile des Codes.
Gibt es Art-von zwei Möglichkeiten, dies zu tun, je nachdem, wie Ihre Anwendung ausgeführt wird. Wenn es ausgeführt wird als Teil der Interaktionen des Benutzers müssen Sie rufen Sie einige APIs, um sicherzustellen, dass das Gerät geht nie in den suspend-Modus.
Müssen Sie ordnen Sie den folgenden code zum ausführen mindestens einmal alle 10 Sekunden.
Wenn Sie die Anwendung läuft als hintergrund-Anwendung, die Sie benötigen, um Ihren code um eine unbeaufsichtigte power-Modus zu blockieren, während auch der obige code. Siehe meine Antwort für mehr details auf unbeaufsichtigte power-Modus.
Haben Sie versucht, mit den Ereignissen ausgesetzt sind, sind in OpenNETCF? Ich bin vor allem ein WinCE bod, aber ich finde es unglaublich, dass jemand würde ein release eine Plattform, die nicht zuverlässig informieren Sie über änderungen zum Status der Stromversorgung, da dies einer der wichtigsten Unterschiede zwischen Desktop-und Mobile Geräte.
Laut http://social.msdn.microsoft.com/Forums/en-US/windowsmobiledev/thread/229dd6a2-f231-4aeb-ad90-c6995ba155cf/ neben POWER_STATE_SUSPEND auf Windows Mobile gibt es auch einen anderen power state POWER_STATE_UNATTENDED.
Wenn WM-Gerät gesperrt wird Sie zum ersten mal POWER_STATE_UNATTENDED und dann POWER_STATE_SUSPEND.
Mit ::RequestPowerNotifications () - API und-Filterung für PBT_TRANSITION es möglich ist, zu behandeln übergänge sowohl POWER_STATE_SUSPEND und POWER_STATE_UNATTENDED.
Das problem mit der Handhabung POWER_STATE_SUSPEND ist, dass es in der Regel behandelt von Ihrem code nach dem Gerät wurde wieder aufgenommen. Ich fand im Web einen Vorschlag zu verwenden, Echtzeit-Priorität für den thread, der fordert ::ReadMsgQueue(..., UNENDLICH,...) und macht die Handhabung.
Für die, die wir verwenden müssen, um die CE-spezifisch ::CeSetThreadPriority (), weil es erlaubt für die Einstellung der Echtzeit-Prioritäten. Ich schamlos 0 Priorität.
In der Regel, auf diese Weise war ich in der Lage, zuverlässig zu handhaben POWER_STATE_UNATTENDED und nicht so zuverlässig POWER_STATE_SUSPEND, denn ich hatte ziemlich zeitaufwendig Betrieb (~2 Sekunden).
Für meine Aufgabe Umgang mit POWER_STATE_UNATTENDED ist, was ich wirklich brauchen, um zu behandeln.
Vielleicht die Antwort auf diese Frage ALSO ist Hilfe: Wie kann ich code ausführen, auf Windows Mobile, während Sie ausgesetzt?