13

私はPCでのみ動作するMetroアプリを書いています(したがって、バッテリーの寿命について心配する必要はありません)。ユーザーがボタンをクリックしたときにバックグラウンドタスクを登録して実行するために必要です。正常に登録されますが、15分の遅延よりも早く実行する方法は見つかりませんでした。これは、このアプリには役に立ちません。すぐに実行するためのアイデアはありますか?

また、私はここでそれが不可能であると言う同様の質問を見つけました、しかし誰かが方法を考え出したに違いありません。

編集:

このタスクを要求する私の理由は次のとおりです。

私のアプリは、数分から数時間までの長期間にわたって表示されるファイルの読み取りと書き込みを行います。今回の大多数の間、アプリがフォアグラウンドで表示される可能性はほとんどありません。実行を継続できるようにコードが必要なため、バックグラウンドタスクを作成するのが最善の方法のように見えましたが、Visual Studioでは完全に機能しますが、VisualStudioの外部でこのタスクを手動で開始する方法は見つかりません。この実行を処理するためのより適切な方法があれば、私はそれを喜んで使用します。

4

5 に答える 5

6

これを回避する方法は、アプリケーションとバックグラウンドタスクの両方から呼び出すことができる共通の関数を作成することでした。

あなたの場合、ユーザーが登録ボタンをクリックすると、タスクを登録してから、(アプリから)共通関数を呼び出すことができます。タスクを実行すると、同じ共通関数を呼び出すこともできます。

于 2013-01-07T14:52:07.123 に答える
6

編集

OPからの追加情報による改訂。

メトロアプリを介してこれを行うことができると私が考える唯一の方法は、ユーザーにアプリをデスクトップに対して「スナップ」するように依頼することです。スナップされたアプリでは、開始/停止を押して、同時にデスクトップを使用する場合にのみ実行できます。両方のアプリがフォアグラウンドで実行されています。


私の他の答えは完全ではないと思うので、より良い答えを提供しようと思います。

明確にするために:バックグラウンドタスクを使用する理由は、アプリが一時停止されている場合でもアプリがコードを実行し続けるためであると述べています。

バックグラウンドタスク:

WinRTバックグラウンドタスクをトリガーしてすぐに実行することはできません。

バックグラウンドタスクにはデフォルトで2時間ごとに1秒のCPUがあり、いつアクティブになるかを指定する方法がないことに注意してください。この場合は、日和見トリガーのみを使用できます。

さらに、アプリがロック画面アプリケーションになっている場合でも、プッシュ通知を使用していない限り、バックグラウンドタスクの即時処理を指定することはできません。プッシュ通知は、実行しようとしていることに適していないためです。ロック画面アプリの場合、通常、15分ごとに2秒のCPUを使用します。

OnSuspending:

ただし、アプリが一時停止されている場合でも、数秒(5、これによると:http: //www.redlist.ch/post/Time-limit-on-suspending-a-WinRT-app.aspx)アプリがOSによって一時停止される前に片付ける時間。この一時停止の猶予時間は、とにかくバックグラウンドタスクでの時間よりも長くなります。

したがって、バックグラウンドタスクを使用せず、代わりにバックグラウンドスレッドを開始して(他の回答に従って)ボタンを押すアクションを実行することをお勧めします(ローカル状態を使用して進行状況を記録します)。これで、アプリの一時停止イベントにもフックする場合、これを使用して、ボタンを押すアクションから何かが完了していないかどうかを確認し、完了することができます。

それが理にかなっていることを願っています。幸運を!

于 2013-01-14T11:26:46.717 に答える
2

UIアクション(ボタンを押す)に基づいてタスクを実行している場合は、ボタンを押すイベントにフックして、UIプロセスの新しいスレッドでタスクを開始することもできます。例えば

new TaskFactory().StartNew(() => YourBackgroundTaskMethod())

UIをブロックすることはなく、必要に応じて、結果をバックグラウンドスレッドからUIに簡単にマーシャリングできます。

このように、アプリがロック画面アプリに昇格することに依存する必要はありません。これは、バックグラウンドタイマータスクを実行する場合の要件です。

于 2013-01-09T14:24:36.020 に答える
2

あなたのユースケースは通知システムから最も恩恵を受けるようです。ファイルを作成するときにアプリケーションに通知を送信できます(ファイル作成サービスまたはクラウドサービスを介してアプリケーションと通信するデスクトップ側の.Net 4.5アプリケーションのいずれかから)。

一般的なバックグラウンド作業に関しては、 Windows.UI.Notifications.ScheduledTileNotificationを使用してタイル通知を毎分変更するようにスケジュールすることができます。

于 2013-01-15T16:34:17.380 に答える
0

生のプッシュ通知イベントをサブスクライブできます。プロセスを開始する場合は、サーバーに生の通知を送信するように要求できます。これにより、バックグラウンドタスクがアクティブになります。

于 2015-02-10T08:34:50.317 に答える