1

https://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9からサンプルをダウンロードし 、windows phone 8.1 プロジェクトを実行してみました。プログラムは実行されますが、イベントをトリガーするように変更を加えた場合でも、バックグラウンド タスクは発生しません。また、アプリをロック画面に追加する要求がないため、バックグラウンド タスクとして実行するように登録されているとは思いません。また、ロック画面にアプリを手動で追加できませんでした。※Lumia 730に8.1デニムを使用。

また、Silverlight 8.1 とバックグラウンドを RT コンポーネントとして使用して、サンプル プログラムを自分で作成しようとしました。

if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name))
            {
                // One register it once
                return;
            }
    var builder = new BackgroundTaskBuilder();
                var trigger = new SystemTrigger(SystemTriggerType.UserAway, false);
                builder.Name = name;
                builder.TaskEntryPoint = typeof(MyBackgroundTask.BackClass).FullName;                   builder.SetTrigger(trigger);

                await BackgroundExecutionManager.RequestAccessAsync();
                BackgroundTaskRegistration registration = builder.Register();
                registration.Completed += RegistrationOnCompleted;

ここでも、回線で例外が発生しています

        BackgroundTaskRegistration registration = builder.Register();

例外はランタイムです

> A first chance exception of type 'System.Exception' occurred in
> Project1.DLL
4

4 に答える 4

2

この問題の解決策を見つけました:

  1. バックグラウンド タスク用のランタイム Windows Phone 8.1 プロジェクトの作成

Windwos Phone バックグラウンド タスク

  1. バックグラウンド タスク プロジェクト内でタスクを登録する場合:

    public async static void Register()
    {
        Debug.WriteLine("Registering geofence bg task");
        if (!IsTaskRegistered())
        {
            var result = await BackgroundExecutionManager.RequestAccessAsync();
            var builder = new BackgroundTaskBuilder();
    
            builder.Name = TaskName;
            builder.TaskEntryPoint = typeof(BackgroundTask.YourTaskName).FullName;
            builder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
            try
            {
                builder.Register();
                Debug.WriteLine("GeoFence Task Registered");
            }
            catch (Exception ex)
            {
                Debug.WriteLine("GeoFence Task Failed : " + ex.Message.ToString());
            }
    
    
    
        }
        else { }
    
    }
    

バックグラウンド プロジェクト名を参照して、TaskEntryPoint を正しく追加していることを確認してください。「BackgroundTask.YourTaskName」のようになります。

  1. build.Name パラメータの TaskName 文字列は次のようになります。

    static string TaskName = "BackgroundTask.YourTaskName";

  2. appmanifest の宣言タブで TaskEntryPoint を宣言します。ここでは GeofenceTask を使用するため、タスクに必要ないくつかのチェックボックスをオンにしました。

Windwos Phone バックグラウンド タスク 2

ここで再び EntryPoint を入力します (TaskEntryPoint と同様): "BackgroundTask.YourTaskName"

  1. それを行うアプリのどこかでタスクを初期化するときは、次を使用します。

    BackgroundTask.YourTaskName.Register();

それはすべて、タスクのエントリポイントに関するものです。したがって、別のプロジェクトの下にタスクがある場合は、そのプロジェクトの名前とその下のバックグラウンド タスク クラスの名前を入力する必要があります。

EntryPoint にバックグラウンド タスク クラス名だけを使用しないでください。そのクラスを含むプロジェクト名で参照する必要があります。

それが役に立てば幸い、

于 2015-03-11T12:53:18.933 に答える
1

例外が何であるか、それに付随するテキストが何であるかについては言及していません。これは答えを難しくします。

それにもかかわらず、エラーが「クラスが登録されていません」であると仮定すると、いくつかのことを行う必要があります。

  1. Windows ランタイム コンポーネント プロジェクト内のクラスであることを確認MyBackgroundTask.BackClassしてください (Silverlight プロジェクト内にあることはできません)。
  2. そのプロジェクトを必ず参照してください (参照しないと、コンパイラ エラーが発生します)。
  3. Package.appxmanifest デザイナーの[宣言] タブで、バックグラウンド タスク エントリが正しく追加されていることを確認します。クラス名を再びエントリ ポイントとして使用する
于 2015-02-12T06:35:49.870 に答える
0

同じ問題。Package.appxmanifest のエントリ ポイント パラメータのスペルが「Module.EntryPoint」ではなく「Module:EntryPoint」であることがわかりました。コロンをピリオドに変更するだけで済みました。

于 2015-07-28T16:50:35.697 に答える