4

.NET Compact 3.5 で実行されている Windows Mobile 6.1/6.5 アプリケーションに取り組んでいます。このアプリケーションは、古い HP iPaq 210 で何年も正常に実行されていますが、Socket SoMo 655 で実行するのに問題があります。

OpenNETCF ライブラリの LargeIntervalTimer 機能を除いて、ほとんどすべてが正常に機能します。デバイスが PC に接続されたままになっている場合、タイマーは実際に機能しますが、それ以外の場合、デバイスはこのタイマーがウェイクアップできないサスペンド モードに陥ります。

さて、これが LargeIntervalTimer の目的全体です。サスペンド モードに入っているデバイスを起動して、何らかのタスクを実行できるようにします。それは iPaq で正しく動作し、一見どのような種類のスリープ モードからも正常に復帰します。ただし、SoMo では、デバイスをオフにするのに十分な時間放置した後、タイマーは作動しません。

誰にもアイデアはありますか?マネージ コード内で使用できる任意の電源状態からデバイスをスリープ解除する別の方法はありますか?


編集:

有益な提案をしてくれた Josef に感謝します。また、わざわざテスト アプリを書いてくれてありがとう。私が知る限り、イベントはデータベースに正しく追加されています。アプリケーションを実行し、[開始] を押してすぐに [停止] を押すと、1 つの新しいエントリ (テスト アプリ自体によって作成されたもの) があることがわかります。ただし、[スタート] を押して自分のアプリケーションを開いてから元に戻って [ストップ] を押すと、2 つの新しいエントリが表示されます。これは、動作中の iPaq と問題のある Socket の両方のデバイスに当てはまります。

デバイスがサスペンドモードに入ることを許可された後、問題はソケットの電源状態に関係しているに違いないと考えています。ソケットが USB 経由で PC に接続されたままになっている場合、LargeIntervalTimer は正しく動作します。これは、接続中にデバイスが完全にスリープ状態にならないためだと思います。ただし、デバイスのプラグを抜いてサスペンド モードに入ると、タイマーが起動しません。

とにかく、助けてくれてありがとう。私はまだアイデアを受け入れていますが、見落としている単純な解決策があるようには見えません...


編集2:

Socket SoMo 655 は Windows CE を実行しているのに対し、Socket SoMo 650 (アプリケーションが完全に動作する) は Windows Mobile 6.5 を実行していることに気付きました。OpenNETCF ライブラリに干渉しているこれらのモバイル オペレーティング システム間に違いはありますか?

4

1 に答える 1

2

OpenNetCF LargeIntervalTimer は通知データベースを使用し、時間ベースのイベントを追加します。

これが失敗するか、通知エンジンがイベント (アラーム) を発生させない場合、LargeIntervalTimer は失敗します。

https://code.google.com/p/win-mobile-code/source/browse/#svn%2Ftrunk%2FOpenNetCF_LargeTimer (bin dir にもバイナリがあります)でテスト アプリケーションを実行しました。

ここに画像の説明を入力 ここに画像の説明を入力

アプリケーションが開始されたら、開始をクリックするだけで、新しい LargeTimer が初期化されます。次に、ツールは通知イベントのリストを取得し、それらをテキスト ボックスにダンプします。

(停止) をクリックすると、アプリは LargeTimer を停止し、別のイベント リストを実行します。次に、リストが比較され、新しいエントリがあれば内容が取得されます。

 New entry: 889192489, \\.\Notifications\NamedEvents\50f2c337-5b1a-4b78-8923-53df9e009980

OpeneNetCF は古いエントリを削除しないようで、常に新しい一意の名前付きイベント エントリを作成します。

お使いのデバイスで LargeTimer が動作しない場合は、イベントがデータベースに登録されていないことが原因である可能性があります。このツールを使用すると、古いエントリと新しいエントリを確認できます。

〜ヨセフ

于 2012-11-22T13:53:17.650 に答える