gpt4 book ai didi

c# - 可移植图书馆中的计时器

转载 作者:IT王子 更新时间:2023-10-29 04:06:01 26 4
gpt4 key购买 nike

我在便携库/Windows 应用商店中找不到计时器。 (针对 .net 4.5 和 Windows Store aka Metro)

有人知道如何创建某种计时事件吗?

我需要某种秒表,所以它应该每秒刷新一次左右

最佳答案

更新:我们已在 Visual Studio 2013 中修复此问题。面向 Store (Windows 8.1) 和 .NET Framework 4.5.1 项目的可移植库现在可以引用 Timer。

这是我们的实现细节泄露给用户的不幸案例。当您仅针对 .NET 4.5 和 Windows 应用商店应用程序时,我们实际上会导致您针对与针对下层平台(.NET 4、SL 4/5、Phone 7.x)时不同的内容进行构建。我们尝试将这两者视为相同,但下面的有限更改开始泄漏(例如 Timer 和 Reflection)。我们在这里介绍了其中的一些内容:http://channel9.msdn.com/Shows/Going+Deep/NET-45-David-Kean-and-Marcea-Trofin-Portable-Libraries .

我们会在未来的版本中解决这个问题。在那之前,您有几个解决方法:

1) 使用 Task.Delay 实现您自己的 Timer 版本,这是我们在内部使用的快速副本:

internal delegate void TimerCallback(object state);

internal sealed class Timer : CancellationTokenSource, IDisposable
{
internal Timer(TimerCallback callback, object state, int dueTime, int period)
{
Contract.Assert(period == -1, "This stub implementation only supports dueTime.");
Task.Delay(dueTime, Token).ContinueWith((t, s) =>
{
var tuple = (Tuple<TimerCallback, object>)s;
tuple.Item1(tuple.Item2);
}, Tuple.Create(callback, state), CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion,
TaskScheduler.Default);
}

public new void Dispose() { base.Cancel(); }
}

2) 将您的项目降级为 .NET 4.0 和 Windows 应用商店应用,这将使您能够访问 Timer。

3) 创建一个针对 .NET 4.0 和 Windows Store 应用程序的新项目,并将需要计时器的代码放入其中。然后从 .NET 4.5 和 Windows 应用商店应用程序项目中引用它。

附带说明一下,我已经在 PclContrib 网站上为自己提交了一个工作项目以添加计时器支持:http://pclcontrib.codeplex.com/workitem/12513 .

关于c# - 可移植图书馆中的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com