可移植类库中的Thread.Sleep()

MSDN文档说Thread.Sleep()可以在可移植类库中使用。 编译器另有说法。 除旋转循环外,我还有什么选择? Thread.CurrentThread.Join()也不存在。

项目文件:

    Debug AnyCPU {C46B138E-CC30-4397-B326-8DD019E3874B} Library Properties x0xtest.AVR x0xtest.AVR v4.0 Profile3 512 {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}   true full false bin\Debug\ DEBUG;TRACE prompt 4   pdbonly true bin\Release\ TRACE prompt 4                      {F78547AC-1CA1-4ADB-9FA8-3E7DEB682240} x0xtest.Comm    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.     -->  

这是“便携式”的不幸副作用。 通过减法,库变得非常便携,删除了许多可能目标之一上不可用的所有部分。 这对Thread类造成了严重破坏,它完全没有任何有用的成员。 其中只有5个,MemoryBarrier(),CurrentCulture,CurrentThread,CurrentUICulture和ManagedThreadId。

这可能看起来很奇怪,广告目标的交集当然支持更多。 这可能与未广告的相关。 即将推出的将在ARM内核上运行的Windows 8版本。 其他称为WinRT或Metro或“.NET for Metro样式应用程序”API,具体取决于您使用的工具。 WinRT严重削减了传统的Windows API,其System.Windows.Threading命名空间非常空。

这将产生大量关于SO的问题,即“Eeek,现在我该做什么”。 这里可能的解决方法是刻录一个虚拟的System.Threading.ManualResetEvent对象。 它有一个WaitOne(TimeSpan)方法。

Fwiw,我个人并不期待对这个图书馆进行编程。 到目前为止,最惊人的消息是在您提供的链接的问答部分:

问:我想问一下System.Linq.Expressions.Expression类的Compile方法有什么用。
答:Windows Phone / Xbox不支持它,因此只有在您定位Silverlight + .NET时才会显示。

哎哟。 便携,可运动。 这需要炖一段时间。 我对DevDiv,特别是David Kean的同情,艰难的工作表示同情。

(我’拥有’微软的便携式图书馆项目)

不幸的是,这是对我们制作的可移植库项目表面区域的最新更改,以便我们可以运行并由Metro应用程序引用。 Metro风格应用程序,Visual Studio 11和Windows 8的新function之一是消除了创建和控制自己的线程的应用程序的需求(这很难做到正确)。 相反,我们的想法是您使用语言(即async / await )和框架function( Task )来执行并与后台应该发生的操作同步。

用作替换的内容(例如, ManualResetEventTask.Delay )完全取决于您的方案以及您要定位的平台。 你能解释一下你在做什么吗?

 System.Threading.Tasks.Task.Delay(ms).Wait(); 

作为替代品的替代品

 System.Threading.Thread.Sleep(ms); 

这在移植遗留代码库时工作正常。

尝试使用超时等待http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx 。

您可以在System.Threading.Tasks使用Task.Delay