2

WP8.1 のバックグラウンド タスクに問題があります。このチュートリアルに従って、Windows ランタイム コンポーネントとしてバックグラウンド タスクを作成しました 。 .aspx

問題は、バックグラウンド タスクを実行できないことです。onNetworkChange で実行されます。フライトモードに戻ってできるときは、発砲していません。[デバッグの場所] ツールバーのライフサイクル イベントに移動すると、[バックグラウンド タスクがありません] と表示されます。バックグラウンド タスクを登録するコードをデバッグしましたが、登録されています。また、「このブレークポイントは現在ヒットされません。このドキュメントにはシンボルが読み込まれていません。これが問題の原因だと思います。

bin と obj フォルダーを削除して再構築してみました。- プロジェクトのクリーニング。- プロジェクトをゼロから構築しようとしています。- Just my code オプションをオフにします。- 別のマシンで同じことを試みましたが、まだ何もありません。

登録用の私のコード

var taskRegistered = false;
        var exampleTaskName = "UploadTask";

        foreach (var task in BackgroundTaskRegistration.AllTasks)
        {
            if (task.Value.Name == exampleTaskName)
            {
                taskRegistered = true;
                break;
            }
        }

        if (!taskRegistered)
        {
            var builder = new BackgroundTaskBuilder();

            builder.Name = exampleTaskName;
            builder.TaskEntryPoint = "Tasks.Upload";
            builder.SetTrigger(new SystemTrigger(SystemTriggerType.NetworkStateChange, false));
            BackgroundTaskRegistration task = builder.Register();
        }

パッケージマニフェストファイルは次のとおりです

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.Upload">
      <BackgroundTasks>
        <Task Type="systemEvent" />
        <m2:Task Type="deviceUse" />
      </BackgroundTasks>
    </Extension>
  </Extensions>

私のタスクは次のようになります。

namespace Tasks
{
public sealed class Upload : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        Debug.WriteLine("Am i even getting here?");
    }
  }
}

これを機能させるのに時間がかかりすぎたので、誰か助けてもらえますか。ありがとう

4

1 に答える 1

4

あなたのコードを試してみたところ、この特定のSystemTriggerType.NetworkStateChangeに問題があります。実際、Lifecycle Eventsドロップダウンに登録されたBackgroundTaskも表示されません。しかし、たとえばSystemTriggerTypeをSystemTriggerType.TimeZoneChangeに変更するだけで、それを見ることができます。

少し変更したコードは次のとおりです。

await BackgroundExecutionManager.RequestAccessAsync();
if (!taskRegistered)
{
    Debug.WriteLine("Registering task inside");
    var builder = new BackgroundTaskBuilder();
    builder.Name = exampleTaskName;
    builder.TaskEntryPoint = "Tasks.Upload";
    builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
    BackgroundTaskRegistration task = builder.Register();
    await new MessageDialog("Task registered!").ShowAsync();
}

登録されているにもかかわらず、元のコードでBackgroundTaskが VS に表示されない理由がわかりません - それはBackgroundTaskRegistration.AllTask ​​s にあります - この場合、別のSystemTriggerTypeでデバッグして、リリースバージョンで目的のものに切り替えることができます。

また、問題のあるSystemTriggerType.NetworkStateChangeを持つBackgroundTaskが機能するかどうかもテストしました。実際、機能しています。NetworkStateが変更されたときにトースト メッセージを送信するように、BackgroundTaskを少し変更しました。タスクを登録した後、WiFiのオン/オフを切り替えると、トーストメッセージが表示されます。タスクのコード:

public sealed class Upload : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        Debug.WriteLine("Hello Pat");
        ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
        XmlNodeList textElements = toastXml.GetElementsByTagName("text");
        textElements[0].AppendChild(toastXml.CreateTextNode("Upload Task - Yeah"));
        textElements[1].AppendChild(toastXml.CreateTextNode("I'm message from your Upload task!"));
        ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
    }
}

完全な例は、ここからダウンロードできます

于 2014-10-16T16:12:05.650 に答える