类库(通用应用程序的便携式) System.Threading.Thread 限制

Posted

技术标签:

【中文标题】类库(通用应用程序的便携式) System.Threading.Thread 限制【英文标题】:Class Library (Portable for Universal Apps) System.Threading.Thread limitations 【发布时间】:2014-12-26 18:53:13 【问题描述】:

我使用 Visual Studio 2013 Ultimate Update 4 创建一个类型为“类库(通用应用程序便携)”的新项目。生成的 PCL 针对两个平台,即 Windows 8.1 和 Windows Phone 8.1,这正是我所需要的。

System.Threading.Thread 类在此子集中不受支持。 当我使用另外两个平台(.NET Framework 4.5.1 和 Silverlight 5)扩展程序集目标时,System.Threading.Thread 神秘地出现并变得可用。 我尝试使用它,它可以在 Windows.Phone 8.1 和 Windows 8.1 Store 应用程序中完美运行。

为了推动开发人员采用异步/等待模式,我是否理解 System.Threading.Thread 类只是从“默认”PCL 配置中隐藏?

抛开不同异步执行和线程管理模型的优缺点比较,在上述场景中使用 System.Threading.Thread 类是否存在技术缺陷?

提前致谢。

【问题讨论】:

真的需要使用 Thread 类,而不能用 Task 做同样的事情吗?你在做什么有点hacky。如果你真的需要它并且它可以工作 - 很好,但如果你不需要它,你最好切换到任务。 能否尝试通过商店认证(WACK)运行应用,看看是否通过? @PeterTorr 我针对我的应用程序运行了 Windows App Certification Kit 3.4,它成功通过了所有测试。 【参考方案1】:

在与 .NET 团队的 David Kean 讨论后,这是预期的行为,但请注意,您确实不能访问完整的 .NET Thread 类;你只会得到一些东西,比如ManagedThreadIdCurrentUICulture

因此,您仍然需要使用线程池或基于任务的 API 才能运行并行操作。

【讨论】:

很高兴能得到 David 关于第二件事的意见:***.com/questions/27660915/…

以上是关于类库(通用应用程序的便携式) System.Threading.Thread 限制的主要内容,如果未能解决你的问题,请参考以下文章

在便携式类库中使用SQLite

便携式类库 / mvvmcross 中的 Skydrive 同步

无法在通用 Windows 或 WPF 应用程序中引用 .NET Core 类库

德基便携小巧移动电源 超小迷你充电宝手机平板通用创意小白新款-tmall.com天猫

Qt通用方法及类库1

Xamarin PCL 蓝牙看不到设备