C# WinRT替换System.Environment.TickCount

C# WinRT替换System.Environment.TickCount,c#,timer,windows-8,windows-runtime,C#,Timer,Windows 8,Windows Runtime,什么是System.Environment.TickCount的WinRT替代品?它应该是可用的,因为它是可用的。但事实并非如此,我想这是一个[TypeForwardedTo]挂断,因为GetTickCount()不在白名单上,而且.NET从未采用GetTickCount64。标准回退工作正常,您可以使用pinvoke调用本机Windows函数。我验证了使用它的程序通过了Windows应用程序认证工具包测试 [System.Runtime.InteropServices.DllImpor

什么是System.Environment.TickCount的WinRT替代品?

它应该是可用的,因为它是可用的。但事实并非如此,我想这是一个[TypeForwardedTo]挂断,因为GetTickCount()不在白名单上,而且.NET从未采用GetTickCount64。标准回退工作正常,您可以使用pinvoke调用本机Windows函数。我验证了使用它的程序通过了Windows应用程序认证工具包测试

    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    private static extern long GetTickCount64();

请注意,它返回的是long,而不是int。如果这在C#中很重要,您可以简单地强制转换为int以截断(但不是vb.net,只需说明返回类型)

似乎System.Environment.TickCount现在在Windows 8 Windows应用商店应用程序中受支持。

您需要它做什么?对于许多用途,
DateTime.UtcNow
非常好,但它不是等效的。如果需要单调的时间,DateTime.UtcNow不是替代品。UtcNow是任意值。TickCount也是任意值。DateTime.UtcNow.Tick是单调的。@Hans Passant,如果用户将时间向后调整,UtcNow可以跳转。Env.TickCount是单调的。这个问题实际上在ManualResetEventSlim的超时实现中导致了一个错误,我报告了这个错误,并且已经修复。当用户更改时钟时间时,超时突然消失或从未消失。嗯,这通常需要显式调用CultureInfo.ClearCachedData。很高兴这个错误被修复了:)所以我很困惑。如果Metro应用程序允许它们,那么为什么默认情况下它不出现在C#API中?我试图在回答中解释这一点。别向信使开枪,我更喜欢能解决问题的答案。是的,对不起。我不是故意对你唠叨的。我想知道这是否会随着最终版本而改变。不过谢谢。注意,此代码将使您的WinRT应用程序无法在ARM上运行