我必须为WinCE 5.0开发一个应用程序,该应用程序与一个常规的PC应用程序通信/同步数据,该应用提供了一个我可以与移动(工业)设备交谈的网络服务。
由于很明显会导致代码难以在移动设备侧维护(检查连接→完成后:检查Web服务的可用性→完成后:检查移动设备是否符合同步条件→完成后开始交换数据)我很想使用await
s的同步编程方式。
我发现了Daniel Grunwald的一些代码片段,这是编译器为异步/等待功能所需的东西的最小实现。例如,再加上实现Task类型的Task Parallel Library for.Net 3.5(由于某些调用的方法不具有所需的签名,我不得不对其稍作更改),它看起来很有前景。
到目前为止,解决方案还没有构建,因为我缺少TaskCompletionSource
的实现。我用ILSpy反编译了最近的mscorlib,但代码不可用-使用了太多CF中没有的类型。
在这一点上,我想知道这个项目是否注定会失败,因为我永远不会说服VS 2008(我必须使用它来针对智能设备)使用C#编译器(也许有一个变通方法?),或者CF缺乏TaskCompletionSource的关键类型(我可能需要它,因为我想让事件不可用),或者TPL3.5+Grunwald的snippet+TCS实现将构建,但永远不会实际工作。
能请更有经验的人来评估我的意图吗?很乐意听取您的意见、想法和其他方法。谢谢
更新Aaron Stainback的帖子表明,应该可以使用VS2012构建CF 3.5。这至少应该解决编译器问题。
您可以使用Visual Studio 2015按照以下说明编译到Compact Framework 3.5:
- 安装".NET Compact Framework 3.5 Redistributable"
- 从'C:\Program files(x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE'复制文件
- 将文件粘贴到"C:\Program files(x86)\Reference Assemblys\Microsoft\Framework\.NETFramework\v3.5\Profile\CompactFramework"目录
- 创建一个名为"RedistList"的目录
- 在"RedistList"目录中创建一个名为"FrameworkList.xml'的文件
-
将以下内容设置为创建的文件:
<?xml version="1.0" encoding="utf-8"?> <FileList Redist="Net35-CF" Name=".NET Compact Framework 3.5"> </FileList>
现在,您可以在Visual Studio 2015上创建.NET核心类库项目,并以"net35cf"框架为目标。
要使用async/await,可以使用NETStandard.WindowsCE包。
示例项目位于:https://github.com/WindowsCE/System.Collections.Immutable
免责声明:我是上述包和项目的作者。
我认为,将对async
-await
的支持添加到一个本机不支持它的平台上应该是可行的,因为这正是Microsoft.Bcl.Async为.Net 4.0所做的。
但使用async
-await
需要支持它的编译器,这是没有办法的。这意味着使用AsyncCTP的VS2012或VS2010(但我不建议这样做,这不是生产质量)。据我所知,VS2008无法实现这一点。
还有一种可能是使用Mono,但我不知道它是否支持WinCE。