zoukankan      html  css  js  c++  java
  • Windows phone 7 移植到 Windows phone 8 之(AsyncCtpLibrary_Phone 的错误与异常)

    1.先说下背景。

    之前研究了下Async-CTP-v3 异步编程的方式。发现可以使程序从逻辑上清晰无比,然后就在vs2010安装了Async-CTP-v3。

    并在工作的项目中重写了http访问层,主要用到了Task,async,await等关键字和像GetRequestStreamAsync()这种类型的扩展方法。

    2.主要的内容。

     下面先说下wp8 SDK的迁移从以前的wp7项目

    用vs2012打开vs2010的vs项目会弹出一个htm迁移报告,就是这个。有警告的2个项目都不是重要的,让我很欣慰。

    然后接下来我编译了一遍项目。说找不到关键字。

    由于可能这还是7.1的项目吧。我将项目都升级到wp8.0.升级到wp8.0的方法就是在解决方案管理器里面,右键每一个项目,点击升级到

    windows phone 8.0,在升级的时候,有的项目会短暂无反应。一会就好了。然后编译,就发现了主要问题。

    主要说是一个System.Threading.Tasks.Task这个类在AsyncCtpLibrary_Phone.dll和mscorlib.dll中同时存在。

    然后我想那就把之前的AsyncCtpLibrary这个从引用中移除。~~.然后就发现之前在AsyncCtpLibrary这个里面的一些扩展方法都不见了。也就是说新的sdk

    包含了支持了await,async,但AsyncCtpLibrary_Phone.dll这个dll中的扩展方法是没有给的。这真心坑呀。我重写引回去,扩展方法是有了,但是2个程序集

    中都有Task这个类。编译就会报错。。。。。。。。。。。

    3.现在的解决方案。

    我用.net reflector反编了AsyncCtpLibrary_Phone这个dll。看到了里面有2个扩展方法的类。还有一些命名空间。

     找到了我想要的GetRequestStreamAsync()方法。然后就在项目里面自己写了这个扩展方法。当然这里的扩展方法很多。别的扩展方法与这个就类似了。

        public static class AsyncCtpLibrary
        {
            public static Task<Stream> GetRequestStreamAsync(this WebRequest source)
            {
                return Task<Stream>.Factory.FromAsync(new Func<AsyncCallback, object, IAsyncResult>(source.BeginGetRequestStream), new Func<IAsyncResult, Stream>(source.EndGetRequestStream), null);
            }
        }

    还有就是TaskEx.WhenAll<T>这个静态方法也没有 了,编译不过。但我发现Task.WaitAll<>和之前的这个方法是一样的。然后就不用自己写了。

    把之前的TaskEx都换成Task就可以了。这之后程序算可以编译过了,有几个警告。跑了一下,网络获取是没有问题的。代码上算是成功了。

    程序跑起来,试了下3种分辨下的界面,发现还有有一些界面需要适配的。基本都是因为ListBox的高度是固定的,不是动态的原因。

    更多问题以后发现了在写出来分享给大家。。。O(∩_∩)O~

  • 相关阅读:
    Nodejs学习笔记(三)--- 模块
    Nodejs学习笔记(二)--- 事件模块
    Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
    leetcode题解实践
    坑爹的bugsbunnyctf复现
    两道interesting的题目
    python 习题集
    数据结构与算法--java描述
    pentestbox下运行ssh报错,命令报错
    ntfs交换数据流在隐写
  • 原文地址:https://www.cnblogs.com/CCSSPP/p/2748903.html
Copyright © 2011-2022 走看看