wp wp8:后台任务

MScheduledTaskAgent项目下 ScheduledAgent.cs

using System.Diagnostics;
using System.Windows;
using Microsoft.Phone.Scheduler;
using Microsoft.Phone.Shell;
using System.IO.IsolatedStorage;
using System.IO;

namespace MScheduledTaskAgent
{
    public class ScheduledAgent : ScheduledTaskAgent
    {
        /// <remarks>
        /// ScheduledAgent 构造函数,初始化 UnhandledException 处理程序
        /// </remarks>
        static ScheduledAgent()
        {
            // 订阅托管的异常处理程序
            Deployment.Current.Dispatcher.BeginInvoke(delegate
            {
                Application.Current.UnhandledException += UnhandledException;
            });
        }

        /// 出现未处理的异常时执行的代码
        private static void UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            if (Debugger.IsAttached)
            {
                // 出现未处理的异常;强行进入调试器
                Debugger.Break();
            }
        }

        /// <summary>
        /// 运行计划任务的代理
        /// </summary>
        /// <param name="task">
        /// 调用的任务
        /// </param>
        /// <remarks>
        /// 调用定期或资源密集型任务时调用此方法
        /// </remarks>
        protected override void OnInvoke(ScheduledTask task)
        {
            try
            {
                ShellToast toast = new ShellToast();
                toast.Title = "title";
                toast.Content = "content";
                toast.Show();
               
            }
            catch {
           
            }

            NotifyComplete();
        }
    }
}

wp8BackgroundService项目 MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using wp8BackgroundService.Resources;
using Microsoft.Phone.Scheduler;

namespace wp8BackgroundService
{
    /// <summary>
    ///
    /// 1.在wmappmanifest.xml中配置
    /// <Tasks>
    ///  <DefaultTask Name="_default" NavigationPage="MainPage.xaml"/>
    ///  <ExtendedTask Name="BackgroundTask">
    ///    <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MTaskAgent" Source="MScheduledTaskAgent" Type="MScheduledTaskAgent.ScheduledAgent" />
    ///  </ExtendedTask>
    ///</Tasks>
    ///     1.ScheduledTaskAgent固定
    ///     2.MTaskAgent要与当前类中SERVICE_NAME一致
    ///     3.MScheduledTaskAgent即dll名称
    ///     4.MScheduledTaskAgent.ScheduledAgent dll中执行类
    ///
    /// 2.在 解决方案 下 添加 新建项目 选择 计划任务代理
    /// 3.wp8项目 右键 设为启动项目
    /// 4.解决方案 生成解决方案 来生成dll文件
    /// 5.wp8项目 引用 右键 添加引用 解决方案 项目 勾选 确定
    ///
    /// </summary>
    public partial class MainPage : PhoneApplicationPage
    {
        // 构造函数
        public MainPage()
        {
            InitializeComponent();
          
        }

        private void start(object sender, RoutedEventArgs arg)
        {
            startService();
        }

        private String SERVICE_NAME = "MTaskAgent";

        private void startService()
        {
            PeriodicTask periodTask = ScheduledActionService.Find(SERVICE_NAME) as PeriodicTask;

            if(periodTask != null)
            {
                ScheduledActionService.Remove(SERVICE_NAME);
            }

            periodTask = new PeriodicTask(SERVICE_NAME);

            periodTask.Description = "后台任务";
            try
            {
                ScheduledActionService.Add(periodTask);
                ScheduledActionService.LaunchForTest(SERVICE_NAME, TimeSpan.FromSeconds(3));
                System.Diagnostics.Debug.WriteLine("后台任务启动");
            }
            catch(Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }

           

        }
    }
}

wmappmanifest.xml

<Tasks>
      <DefaultTask Name="_default" NavigationPage="MainPage.xaml"/>
      <ExtendedTask Name="BackgroundTask">
        <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MTaskAgent" Source="MScheduledTaskAgent" Type="MScheduledTaskAgent.ScheduledAgent" />
      </ExtendedTask>
    </Tasks>



这样 项目退出之后 也会处理

猜你喜欢

转载自samson870830.iteye.com/blog/2352282