8

我必须为 WinCE 5.0 开发一个应用程序,该应用程序与常规 PC 应用程序通信/同步数据,该应用程序提供可以与我的移动(工业)设备通信的 Web 服务。

由于很明显会导致代码难以在移动设备端维护(检查连接→完成时:检查网络服务可用性→完成时:检查移动设备是否符合同步条件→完成时开始交换数据)我很喜欢使用awaits 的同步编程方式。

我找到了 Daniel Grunwald 的一些代码片段,它是编译器为 async/await 功能所需的东西的最小实现。例如,与实现 Task 类型的 .Net 3.5 的任务并行库(我不得不稍微更改,因为某些调用的方法不存在所需的签名)一起,它看起来很有希望。

到目前为止,解决方案还没有建立,因为我缺乏TaskCompletionSource. 我用 ILSpy 反编译了最近的 mscorlib,但代码不可用 - 使用的类型太多,CF 中不存在。

在这一点上,我想知道这个项目是否注定会失败,因为我永远不会说服 VS 2008(我必须使用它来定位智能设备)使用 C# 5 编译器(也许有解决方法?),或者CF 缺少 TaskCompletionSource 的关键类型(我可能需要它,因为我想让事件等待),或者 TPL3.5 + Grunwald 的片段 + TCS 实现将构建但从未真正起作用。

可以请更有经验的人评估我的意图吗?很想听听您的意见、想法和替代方法。谢谢。

更新 Aaron Stainback 的帖子表明应该可以使用 VS2012 构建 CF 3.5。那至少应该解决编译器问题。

4

2 回答 2

3

您可以按照以下说明使用 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

免责声明:我是上述包和项目的作者。

于 2017-06-27T15:36:19.120 回答
2

我认为添加对async-的支持await到本机不支持它的平台应该是可行的,因为这正是 Microsoft.Bcl.Async 为 .Net 4.0 所做的。

但是使用async-await需要支持它的编译器,没有办法解决这个问题。这意味着带有异步 CTP 的 VS 2012 或可能的 VS 2010(但我不建议这样做,这不是生产质量)。据我所知,没有办法在 VS 2008 上使用它。

另一种可能性是使用 Mono,但我不知道它是否支持 WinCE。

于 2013-06-24T08:28:29.290 回答