我必须为 WinCE 5.0 开发一个应用程序,它与常规 PC 应用程序通信/同步数据,该应用程序提供我可以与我的移动(工业)设备通信的 Web 服务。
因为这显然会导致移动设备端难以维护的代码(检查连接→完成时:检查Web服务可用性→完成时:检查移动设备是否有资格同步→完成后开始交换数据)我很乐意使用 await
s 进行同步编程。
我找到了一些code snippet由 Daniel Grunwald 编写,这是编译器异步/等待功能所需内容的最小实现。与Task Parallel Library for .Net 3.5一起(我必须稍微改变一下,因为某些调用的方法不存在所需的签名)例如,它实现了任务类型,它看起来很有希望。
到目前为止,该解决方案尚未构建,因为我缺少 TaskCompletionSource
的实现。我用 ILSpy 反编译了最近的 mscorlib,但代码不可用 - 使用的类型太多,CF 中不存在。
此时我想知道这个项目是否一定会失败,因为我永远不会说服 VS 2008(我必须使用它来定位智能设备)使用 C# 5 编译器(也许有解决方法? ),或者 CF 缺少 TaskCompletionSource 的关键类型(我可能需要它,因为我想让事件可等待),或者 TPL3.5 + Grunwald 的代码片段 + TCS 实现将构建但从未真正工作。
有经验的人可以评估一下我的意图吗?很想听听您的评论、想法和替代方法。谢谢。
更新 Aaron Stainback's post表明应该可以使用 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 Assemblies\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 Core 类库项目,并以“net35-cf”框架为目标。
要使用 async/await,您可以使用NETStandard.WindowsCE 包。
示例项目可以在以下位置找到:https://github.com/WindowsCE/System.Collections.Immutable
免责声明:我是上述包和项目的作者。
关于.net-3.5 - Async/await for Compact Framework v3.5 - 手动实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270216/