none
关于LockScreen中SetImageFileAsync(StorageFile )与SetImageStreamAsync(IRandomAccessStream)区别 RRS feed

  • 问题

  • 我想知道SetImageFileAsync在本质上是不是也是把File转换成IRandomAccessStream再进行设置的,唯一的区别是在SetImageFileAsync中File转换成IRandomAccessStream以及用IRandomAccessStream设置锁屏背景是在后台线程中进行,而在SetImageFileAsync中它自己是先返回的。而在SetImageStreamAsync中,它是等待它用IRandomAccessStream设置完锁屏背景后再返回的。
    2012年4月23日 7:35

答案

  • 比如有个图片文件,你用SetImageFileAsync将此图片设置为锁屏背景,然后又创建与该图片文件同名的文件,就会有access is denied的错误,如果现吧图片文件转换成流再用SetImageStreamAsync进行以上操作,就不会出现这个错误。测的时候会在SetImageStreamAsync中等待操作完成然后返回,而且会依据流的大小时间也会不一样,长的时候达到五六秒甚至更多
    2012年4月25日 8:46

全部回复

  • 都是异步方法,只是你用了await之后,await后面的代码会等待Async方法返回后执行。不过如我们之前讨论的,SetImage都是要通过host去执行,并不影响当前线程。


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

    2012年4月25日 6:19
    版主
  • 比如有个图片文件,你用SetImageFileAsync将此图片设置为锁屏背景,然后又创建与该图片文件同名的文件,就会有access is denied的错误,如果现吧图片文件转换成流再用SetImageStreamAsync进行以上操作,就不会出现这个错误。测的时候会在SetImageStreamAsync中等待操作完成然后返回,而且会依据流的大小时间也会不一样,长的时候达到五六秒甚至更多
    2012年4月25日 8:46
  • 目前没有关于这个的详细的说明,文档上也没有备注,所以只能根据测试结果做一些猜测,SetImageFileAsync 内部去将文件转成了stream ,但其本身还是直接返回的。 而SetImageStreamAsync则没有,await之后,下面的代码则等待了异步返回。所以我估计SetImageStreamAsync直接调用了API去设置,而SetImageFileAsync 只是没有等待,设置就返回。 

    具体的内幕,还是需要等待更详细的说明和文档出来才能知道。


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

    2012年4月30日 7:21
    版主