PCL定时器更改功能

时间:2015-04-08 00:49:47

标签: timer xamarin portable-class-library

我已经检查了Timer in Portable Library,但我不知道如何调用Change函数,因为它没有在类中实现,也没有从父类继承。

_timer = new Timer(OnTimerTick, null, TimeSpan.FromSeconds(1.0), TimeSpan.Zero);
_timer.Change(TimeSpan.FromSeconds(1.0), TimeSpan.Zero); //how to implement this

2 个答案:

答案 0 :(得分:1)

不是使用David Kean的第一个解决方案:(构建类Timer),而是使用他的第三个解决方案:(使用Henry C的代码示例创建一个目标.NET 4.0 Timer适配器)。

无论如何,我仍然希望得到一些关于如何在.NET中定义的Timer类中实现Change函数的反馈。谢谢!

public class PCLTimer
{
    private System.Threading.Timer timer;
    private Action<object> action;

    public PCLTimer(Action<object> action, object state, int dueTimeMilliseconds, int periodMilliseconds)
    {
        this.action = action;
        timer = new System.Threading.Timer(PCLTimerCallback, state, dueTimeMilliseconds, periodMilliseconds);
    }

    public PCLTimer(Action<object> action, object state, TimeSpan dueTimeMilliseconds, TimeSpan periodMilliseconds)
    {
        this.action = action;
        timer = new System.Threading.Timer(PCLTimerCallback, state, dueTimeMilliseconds, periodMilliseconds);
    }

    private void PCLTimerCallback(object state)
    {
        action.Invoke(state);
    }

    public bool Change(int dueTimeMilliseconds, int periodMilliseconds)
    {
        return timer.Change(dueTimeMilliseconds, periodMilliseconds);
    }

    public bool Change(TimeSpan dueTimeMilliseconds, TimeSpan periodMilliseconds)
    {
        return timer.Change(dueTimeMilliseconds, periodMilliseconds);
    }

    public new void Dispose()
    {
        timer.Dispose();
    }
}

答案 1 :(得分:1)

我开发了一个支持库,其中包含PCL中缺少或不完整的类型。该库名为Shim,也可在NuGet上找到。

Shim 针对不同的平台目标提供不同的实例。如果您安装 Shim 表单 NuGet ,它将为您的Visual Studio项目选择相关实例,无论是可移植类库,Windows 8应用程序还是Xamarin.Android类库。

Shim 包含System.Threading.Timer的声明,包括两个构造函数和Change(int, int)方法。在Windows 8应用程序或类库中使用 Shim 时,内部使用Windows.System.Threading.ThreadPoolTimer类进行Windows 8 specific实现。对于其他(非PCL)平台目标,[TypeForwardedTo]声明用于将调用转发到此特定目标的现有实现。

可以在this SO回答中找到一些常规实施细节。如果您不想要完整 Shim 包的开销,您可以使用本SO答案中提供的方法自行实现必要的部分。