none
Windows8中的BackgroundTask是否就是在程序关闭后后台运行的事件?是否能够执行项目中的任意一个函数 RRS feed

  • 问题

  • 我的Windows 8 应用程序需要每隔30分钟从一个网站中抓取数据,并更新磁贴和相应通知。我希望在程序关闭的情况下也能执行,BackgroundTask是否能够完成这一功能。

    2012年11月19日 5:08

答案

全部回复

  • 你应该看这个 http://msdn.microsoft.com/zh-CN/library/windows/apps/xaml/Hh868228(v=win.10)   例子http://code.msdn.microsoft.com/windowsapps/push-and-periodic-de225603/

    P.S. 后台任务一般不与应用相同进程,所以不能直接调用应用进程中的方法。关于后台任务 建议先阅读其白皮书 http://www.microsoft.com/en-us/download/details.aspx?id=27411


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Bluear 2012年11月19日 7:04
    2012年11月19日 5:35
    版主
  • 第一个链接已经失效了。。第二个例子我已经运行过了,这个白皮书英语能力有限。。

    那Bob,是不是我的后台任务只有在我的程序运行时(挂起?)才能够执行,当我的应用终止后,就不存在后台任务了?

    2012年11月19日 6:12
  • 后台任务不受应用本身影响,他又他自己的Host, 所以挂起后后台任务还是可以运行的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月19日 7:07
    版主
  • 那应用关闭的情况下呢?
    2012年11月19日 7:21
  • 同样后台任务并不会受到影响

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月19日 8:41
    版主
  • 那也就是说,我能够通过一个后台任务,在应用未运行的情况下,去获取并更新这个应用的信息(磁贴,或者通知等)?。

    那这和WNS推送不久达到相同的功能了吗,区别只有是服务端发起还是客户端发起了。是这样吗?

    2012年11月19日 8:52
  • 是的,一个是服务端推送,一个是客户端定期查询数据。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月20日 5:29
    版主
  • Bob,我在我的后台任务里(Task写在Windows运行时组件里,主程序调用)有一段打开xml文件并反序列化获取数据的代码,如下

     public async Task<T> ReadData<T>(string fileName)
            {
                T data = default(T);

                //获取文件
                StorageFile sFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
                if (sFile == null)
                {
                    return data;
                }

                using (IInputStream inputStream = await sFile.OpenSequentialReadAsync())
                {
                    //反序列化
                    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                    data = (T)serializer.ReadObject(inputStream.AsStreamForRead());
                }
                return data;
            }

    但是,出现了如下错误    "错误 10 'BackgroundTasks.DataSerialization.ReadData<T>(System.String)' is a generic method.  Windows Runtime methods cannot be generic",请问该如何解决啊。很急!

    2012年11月29日 5:00
  • 用强类型,别用泛型。

    别紧张,我不是什么好人。。。

    2012年12月3日 2:34
  • 可跨越ABI边界的类型,即WinRT可以公开的类型不能是泛型的,所以你的泛型不被支持。

    你即使要用,你可以将此类型作为WinRT内部使用,即不要用Public Protected 修饰。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年12月3日 2:56
    版主