私の頭をこすりました。ユニバーサルWindowsアプリケーションのバックグラウンドタスク "コード1(0x1)で終了しました"
(TimeTrigger
を使用して)15分ごとに実行するように登録されたUWPアプリケーションで、インターネットが利用可能になるたびに(SystemTrigger
を使用して)バックグラウンドタスクがあります。ビジュアルスタジオを使用してデバッグする場合、これらが「ライフサイクルイベント」に表示されるため、これらが正しく登録されていることがわかります。それにもかかわらず、それらを登録するための私のコードは以下の通りです:私は仕事が私のマニフェストに正しく宣言されていることを保証している
bool registered1 = false;
bool registered2 = false;
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == "BackgroundGPS")
{
registered1 = true;
}
if (task.Value.Name == "InternetAvailGPS")
{
registered2 = true;
}
}
await BackgroundExecutionManager.RequestAccessAsync();
if (!registered1)
{
var builder1 = new BackgroundTaskBuilder();
builder1.Name = "BackgroundGPS";
builder1.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";
var triggerTime = new TimeTrigger(15, false);
builder1.SetTrigger(triggerTime);
BackgroundTaskRegistration task1 = builder1.Register();
}
if (!registered2)
{
var builder2 = new BackgroundTaskBuilder();
builder2.Name = "InternetAvailGPS";
builder2.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";
var triggerIA = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
builder2.SetTrigger(triggerIA);
BackgroundTaskRegistration task2 = builder2.Register();
}
。もしそうでなければ、私のアプリはそれらを登録しようとすると例外をスローするでしょう。
デバッグモードで実行すると、BackgroundGPS
とInternetAvailGPS
の両方がライフサイクルイベントに表示されます。しかし、ときに私に実行するためにそれらを強制するためにそれらのいずれかをクリックして、私は、出力ウィンドウに、次を得る:
The program '[4728] backgroundTaskHost.exe' has exited with code 1 (0x1).
私は私の「ファイル名を指定して実行」メソッド内のコードの最初の行に設定されたブレークポイントを持っていますこれは決してヒットしません。バックグラウンドタスクは決して読み込まれたり実行されたりすることはありません。理由はわかりません。これはおそらく、私のRunメソッドの問題ではありませんが、それはこのようになります(私はそれの肉の多くを省略し、ほんの始まりと終わりを含めました)
public async void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("GPS Started");
int errCode = 0;
try
{
_deferral = taskInstance.GetDeferral();
saveGPSStatus(DateTime.Now.ToString(), "", " ");
var access = await Geolocator.RequestAccessAsync();
if (access != GeolocationAccessStatus.Allowed)
{
Debug.WriteLine("No access");
saveGPSStatus("", "", "No GPS Access");
return;
}
Geolocator locator = new Geolocator();
locator.DesiredAccuracyInMeters = 100;
Geoposition position = await locator.GetGeopositionAsync();
//Stuff goes on in here
_deferral.Complete();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
saveGPSStatus("", "", "Unexpected error. Err code "+errCode+". " + e.Message);
_deferral.Complete();
}
}
私は両方でこれを試してみましたビルド10.0.10586.164を実行しているWindows PhoneとWindows Tabletの両方が、自分のバックグラウンドタスクを実行しません。
私が上記のように、これらは数週間前に完全に動作していて、アプリのユーザーの何人かが苦情を申し立てているので何かが間違っていたことを認識しただけです!
ご協力いただきまして誠にありがとうございます。