PCL 定时器更改功能
PCL Timer Change function
我查看了 Timer in Portable Library,但我不知道如何调用 Change 函数,因为它没有在 class 中实现,也没有从父级继承。
_timer = new Timer(OnTimerTick, null, TimeSpan.FromSeconds(1.0), TimeSpan.Zero);
_timer.Change(TimeSpan.FromSeconds(1.0), TimeSpan.Zero); //how to implement this
我现在使用他的第三个解决方案,而不是使用第一个解决方案:(构建 class 计时器),由 David Kean 提供:(创建一个目标 .NET 4.0 计时器适配器)以及 Henry 的代码示例C.
无论如何,我仍然希望得到一些关于如何在 .NET 中定义的定时器 class 中实现 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();
}
}
我开发了一个支持库,其中包含 PCL 中缺失或不完整的类型。该库名为 Shim and is also available on NuGet。
Shim 针对不同的平台目标有不同的实例。如果您安装 Shim 形式 NuGet,它将为您的 Visual Studio 项目选择相关实例,无论是可移植的 class 库,Windows 8 应用程序或 Xamarin.Android class 库。
Shim包含一个System.Threading.Timer
的声明,包括两个构造函数和Change(int, int)
方法。当使用来自 Windows 8 应用程序或 class 库的 Shim 时,有一个 Windows 8 specific 实现使用 Windows.System.Threading.ThreadPoolTimer
[=41= 】 内部。对于其他(非PCL)平台目标,[TypeForwardedTo]
声明用于将调用转发到该特定目标的现有实现。
一些一般的实现细节可以在 this SO answer 中找到。如果您不想要完整的 Shim 包的开销,您可以使用此 SO 答案中提供的方法自己实现必要的部分。
我查看了 Timer in Portable Library,但我不知道如何调用 Change 函数,因为它没有在 class 中实现,也没有从父级继承。
_timer = new Timer(OnTimerTick, null, TimeSpan.FromSeconds(1.0), TimeSpan.Zero);
_timer.Change(TimeSpan.FromSeconds(1.0), TimeSpan.Zero); //how to implement this
我现在使用他的第三个解决方案,而不是使用第一个解决方案:(构建 class 计时器),由 David Kean 提供:(创建一个目标 .NET 4.0 计时器适配器)以及 Henry 的代码示例C.
无论如何,我仍然希望得到一些关于如何在 .NET 中定义的定时器 class 中实现 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();
}
}
我开发了一个支持库,其中包含 PCL 中缺失或不完整的类型。该库名为 Shim and is also available on NuGet。
Shim 针对不同的平台目标有不同的实例。如果您安装 Shim 形式 NuGet,它将为您的 Visual Studio 项目选择相关实例,无论是可移植的 class 库,Windows 8 应用程序或 Xamarin.Android class 库。
Shim包含一个System.Threading.Timer
的声明,包括两个构造函数和Change(int, int)
方法。当使用来自 Windows 8 应用程序或 class 库的 Shim 时,有一个 Windows 8 specific 实现使用 Windows.System.Threading.ThreadPoolTimer
[=41= 】 内部。对于其他(非PCL)平台目标,[TypeForwardedTo]
声明用于将调用转发到该特定目标的现有实现。
一些一般的实现细节可以在 this SO answer 中找到。如果您不想要完整的 Shim 包的开销,您可以使用此 SO 答案中提供的方法自己实现必要的部分。