c# – 定时器在便携式库中

我不能在便携式库/ Windows应用商店中找到一个计时器。 (目标.net 4.5和Windows存储aka地铁)

有没有想法如何创建某种时间事件?

我需要一些秒表,所以这应该刷新一秒钟左右

更新:我们已在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)。我们尝试对待这两个是相同的,但有限的变化下开始泄漏(如定时器和反射)。我们在这里覆盖一些: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应用商店应用,这将让您访问计时器。

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

作为旁注,我已经提交了一个工作项目为我自己在PclContrib网站添加定时器支持:http://pclcontrib.codeplex.com/workitem/12513

http://stackoverflow.com/questions/12555049/timer-in-portable-library

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 定时器在便携式库中